Hologres menyediakan fitur penyamaran data berbasis kolom. Setelah diaktifkan, informasi sensitif akan disamarkan dalam hasil kueri, sehingga membantu melindungi data sensitif dan pribadi Anda. Topik ini menjelaskan cara mengaktifkan fitur penyamaran data serta cara mengkueri dan menghapus konfigurasi penyamaran data.
Informasi latar belakang
Di era data besar, teknologi seperti data besar, komputasi awan, dan artificial intelligence (AI) banyak digunakan. Teknologi ini menyediakan alat andal untuk penambangan dan analitik data secara mendalam serta membantu perusahaan mengungkap nilai tersembunyi dalam data besar. Namun, penggunaannya juga menimbulkan tantangan dalam melindungi informasi sensitif dan pribadi.
Hologres menyediakan fitur penyamaran data yang memungkinkan Anda menetapkan aturan penyamaran untuk pengguna dan kolom tertentu. Saat mengkueri data sensitif, hasilnya akan disamarkan. Fitur ini memungkinkan Anda berbagi, menambang, dan menganalisis data secara efisien sekaligus melindungi informasi sensitif dan pribadi dengan membuat data tidak dapat diidentifikasi saat dibagikan atau digunakan.
Perbandingan versi
Hologres telah mengoptimalkan perilaku penyamaran datanya mulai dari V3.1 dan versi selanjutnya. Tabel berikut membandingkan fitur-fitur pada V3.1 dan versi selanjutnya dengan versi sebelumnya untuk membantu Anda memahami dan menggunakan penyamaran data secara lebih baik.
Fitur | V3.1 dan versi selanjutnya | V3.0 dan versi sebelumnya |
Penyamaran bidang non-TEXT | Penyamaran default didukung untuk tipe data seperti INT, FLOAT, dan ARRAY, namun kebijakan ini hanya berlaku jika didasarkan pada nilai default. Untuk informasi selengkapnya, lihat Nilai default. | Tidak didukung. Anda dapat melewati penyamaran menggunakan CAST TEXT, tetapi metode ini tidak disarankan. |
Tampilan | Hasil disamarkan. | Hasil tidak disamarkan. Hal ini tidak disarankan. |
Bidang JOIN atau kondisi WHERE dengan bidang yang disamarkan | Hasil kosong. | Hasil tidak disamarkan. Hal ini tidak disarankan. |
Konsumsi log biner oleh Flink untuk bidang yang disamarkan |
|
|
Pembacaan langsung bidang yang disamarkan menggunakan MaxCompute | MaxCompute dilarang membaca langsung bidang yang disamarkan dari Hologres. | Pembacaan didukung. Hal ini tidak disarankan. |
Persiapan
Sebelum menggunakan penyamaran data, superuser harus mengaktifkan parameter berikut di tingkat database.
-- Jalankan sebagai superuser.
CREATE EXTENSION IF NOT EXISTS hg_anon;
ALTER DATABASE <current_db> SET hg_anon_enable = on;Setelah menjalankan perintah di atas, sistem akan menggunakan perilaku penyamaran data yang sesuai dengan versi instans Hologres Anda. Anda juga dapat memilih perilaku penyamaran tertentu.
Jika perilaku penyamaran data Hologres V3.1 atau versi selanjutnya memiliki cacat yang menyebabkan perilaku tak terduga, Anda dapat menjalankan perintah berikut untuk kembali ke perilaku penyamaran data V3.0 atau versi sebelumnya.
CALL hologres.set_hg_anon_version(1);Instans V3.0 atau versi sebelumnya tidak mendukung prosedur tersimpan set_hg_anon_version. Jika Anda meningkatkan instans yang menggunakan fitur penyamaran data ke V3.1, Anda dapat menjalankan perintah berikut untuk mengaktifkan fitur penyamaran data V3.1. Jika tidak, sistem akan terus menggunakan fitur penyamaran data versi sebelumnya.
CALL hologres.set_hg_anon_version(2);CatatanJika pernyataan ini dijalankan, perilaku penyamaran data V3.1 dan versi selanjutnya diaktifkan.
Jika pernyataan ini gagal dijalankan, log kesalahan menampilkan
"Error: not safe to upgrade to hg_anon version 2". Hal ini menunjukkan bahwa fitur gagal diaktifkan karena penyamaran dikonfigurasi untuk kolom dengan tipe data selain TEXT, VARCHAR, atau CHAR di database saat ini, sehingga hasil penyamaran data V3.1 dan versi selanjutnya tidak sesuai harapan. Anda harus memperbaiki konfigurasi penyamaran tersebut.
Batasan
Anda tidak dapat mengimpor data dari tabel dan kolom yang memiliki aturan penyamaran ke tabel dan kolom yang tidak memiliki aturan penyamaran. Pesan kesalahan berikut dilaporkan.
Error: ERROR: The insert table has not set SECURITY LABELAnda tidak dapat menjalankan kueri UNION atau DISTINCT pada tabel yang telah dikonfigurasi aturan penyamaran data. Pesan kesalahan berikut dilaporkan.
Error: ERROR: UNION is not support on security itemPenyamaran data dapat memengaruhi kinerja kueri. Tingkat dampaknya bervariasi tergantung pada metode penyamaran dan volume data. Kinerja kueri dapat menurun sebesar 10% hingga 20%. Dalam skenario ekstrem, kinerja dapat menurun secara signifikan.
Anda tidak dapat mengonfigurasi aturan penyamaran untuk tabel eksternal.
Penyamaran data
Konfigurasi aturan penyamaran
Hologres memungkinkan Anda mengonfigurasi aturan penyamaran data untuk kolom atau pengguna tertentu. Sebelum melakukan penyamaran data, Anda harus mengaktifkan parameter GUC untuk penyamaran data. Untuk informasi selengkapnya, lihat Persiapan.
Sintaks
Konfigurasi aturan penyamaran untuk kolom.
Untuk menyamarkan data di beberapa kolom, jalankan pernyataan berikut beberapa kali.
SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value';Konfigurasi aturan penyamaran untuk pengguna.
SECURITY LABEL FOR hg_anon ON ROLE <user_name> IS '[<label_name>|all]:[masked|unmasked]';
Parameter
Parameter
Deskripsi
hg_anon
hg_anon adalah fungsi ekstensi yang dienkapsulasi dalam Hologres. Anda harus memanggil fungsi ekstensi ini untuk mengaktifkan fitur penyamaran data.
tablename
Nama tabel yang berisi kolom yang datanya ingin Anda samarkan.
col_name
Nama kolom yang datanya ingin Anda samarkan.
label_name
Fungsi penyamaran yang telah ditentukan sebelumnya dalam sistem. Anda dapat menjalankan
SHOW hg_anon_labels;untuk melihat nilai label_name yang dikonfigurasi untuk database saat ini.user_name
ID akun Alibaba Cloud Anda. Anda dapat memperoleh ID tersebut di halaman Info Pengguna.
masked|unmasked
masked: Gunakan penyamaran data.
unmasked: Jangan gunakan penyamaran data.
Tabel berikut menjelaskan nilai label_name yang telah ditentukan sebelumnya.
Tipe data
label_name
Kebijakan Masking
Jenis penyamaran
Deskripsi
Contoh
TEXT
name
name
mask
Menyamarkan nama.
Sebelum penyamaran: Li Hua. Setelah penyamaran: *Hua.
Sebelum penyamaran: Wang Xiaoqiang. Setelah penyamaran: **qiang.
email
email
mask
Menyamarkan alamat email.
Sebelum penyamaran: lihuang@alibaba.com. Setelah penyamaran: lih***@alibaba.com.
ip
ip
mask
Menyamarkan alamat IP.
Sebelum penyamaran: 1.2.3.4. Setelah penyamaran: 1.*.*.*.
id
id
mask
Menyamarkan nomor KTP.
Sebelum penyamaran: 110345188812011234. Setelah penyamaran: 1****************4.
phone
phone
mask
Menyamarkan nomor telepon.
Sebelum penyamaran: 13900001234. Setelah penyamaran: *********34.
bank_id
bank_id
mask
Menyamarkan nomor rekening bank atau kartu kredit.
Sebelum penyamaran: 2349867902834701928. Setelah penyamaran: ***************1928.
hash
md5
hash
Menggunakan algoritma MD5 untuk penyamaran.
Sebelum penyamaran: Jalan Wenyi Barat, Hangzhou, Zhejiang. Setelah penyamaran: dbf894b409d4a2ef17dfd9c7fdcafcd8.
first_mask
first_mask
mask
Menentukan aturan first_mask yang hanya menampilkan karakter pertama.
Sebelum penyamaran: 123456789. Setelah penyamaran: 1********.
INT, FLOAT, dan tipe lainnya
Default
default_value
default_value
Menyamarkan data berdasarkan nilai default.
CatatanJika label_name tidak ada saat Anda mengonfigurasi penyamaran data, sistem akan menggunakan penyamaran nilai default.
Pengaturan ini hanya didukung di Hologres V3.1 dan versi selanjutnya.
Daftar berikut menunjukkan pemetaan antara tipe data dan nilai penyamaran default:
TEXT/VARCHAR/CHAR: ***
BOOLEAN: false
INT8/INT4/INT2: 0
TIMESTAMPTZ/TIMESTAMP: 2000-01-01 00:00:00
FLOAT8/FLOAT4/DECIMAL/NUMERIC: 0.0
MONEY: 0
DATE: 2000-01-01
TIME/TIMETZ: waktu saat ini
UUID: 00000000-0000-0000-0000-000000000000
Lihat aturan penyamaran yang dikonfigurasi
Lihat aturan penyamaran yang dikonfigurasi untuk kolom.
-- Lihat aturan penyamaran yang dikonfigurasi untuk kolom. SELECT c.relname ,a.attname ,provider ,label FROM pg_seclabel s INNER JOIN pg_catalog.pg_class c ON s.objoid = c.relfilenode INNER JOIN pg_catalog.pg_attribute a ON s.objoid = a.attrelid WHERE a.attnum = objsubid;Lihat aturan penyamaran yang dikonfigurasi untuk pengguna.
-- Lihat aturan penyamaran yang dikonfigurasi untuk pengguna. SELECT usename, label FROM pg_shseclabel s INNER JOIN pg_catalog.pg_user u ON s.objoid = u.usesysid;
Ubah aturan penyamaran kustom
Jika aturan penyamaran yang dikonfigurasi tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikan aturan penyamaran dengan memodifikasi parameter GUC hg_anon_lables.
Sintaks
-- label_name adalah nama kustom, dan method menentukan metode bawaan di Hologres. ALTER DATABASE <db_name> SET hg_anon_labels = '[ {"label": <label_name1>, "method":<method1>}, {"label": <label_name2>, "method":<method2>}, ... ]';Setelah menjalankan perintah
ALTER DATABASE, pengaturan baru tidak berlaku untuk koneksi saat ini. Anda harus membuat koneksi baru. Anda dapat menjalankan perintah berikut untuk memeriksa apakah pengaturan baru sudah berlaku.SHOW hg_anon_enable;
Contoh
ALTER DATABASE test_db SET hg_anon_labels = '[ {"label":"ip", "method":{"desensType":"mask", "type":"ip"}}, {"label":"email", "method":{"desensType":"mask", "type":"email"}}, {"label":"name", "method":{"desensType":"mask", "type":"name"}}, {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}, {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}}]';Parameter:
Item penyamaran
Deskripsi
Contoh Penyamaran Data
{"desensType":"mask", "type":"ip"}
Menyamarkan alamat IP.
192.*.*.*
{"desensType":"mask", "type":"email"}
Menyamarkan alamat email.
abc***@example.net
{"desensType":"mask", "type":"name"}
Menyamarkan nama.
*Wu
{"desensType":"hash", "type":"md5", "salt":""}
Penyamaran hash.
e086aa137fa19f67d27b39d0eca186103228f322c9c98a125554a24f875f0f7e
{"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}{"label":"last_mask", "method":{"desensType":"mask", "type":"user_define", "before":0, "after":1}}
Penyamaran konten kustom.
None
Contoh
Data sampel
Persiapkan sumber data. Anda juga dapat menggunakan data bisnis Anda sendiri.
-- Buat database.
CREATE DATABASE hg_anon_demo;
-- Buat tabel data sampel.
DROP TABLE IF EXISTS personal_basic_information;
CREATE TABLE personal_basic_information
(
name TEXT
,email TEXT
,ip TEXT
,id TEXT
,phone TEXT
,bank_id TEXT);
-- Masukkan data sampel.
INSERT INTO personal_basic_information(name,email,ip,id,phone,bank_id) VALUES
('Zhang San','jiaxi.jx@alibaba-inc.com','127.0.0.1','142732199104050022','18157161223','4514610803067088'),
('Li Si','wb-hy583084@antgroup.com','127.0.0.1','510622198412248000','15757121834','6252470010027800'),
('Li Xiaoyao','wb-hy583084@antgroup.com','172.21.4.234','511025198812271696','18215451832','6252470010027800');Konfigurasi aturan penyamaran untuk kolom
-- Buat ekstensi hg_anon.
CREATE EXTENSION IF NOT EXISTS hg_anon;
-- Aktifkan penyamaran data untuk database hg_anon_demo.
ALTER DATABASE hg_anon_demo SET hg_anon_enable = on;
-- Konfigurasi aturan penyamaran data untuk setiap kolom.
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.name IS 'name';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.id IS 'id';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.phone IS 'phone';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.email IS 'email';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.bank_id IS 'bank_id';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.ip IS 'ip';Setelah membuat koneksi baru, jalankan perintah berikut untuk melihat hasil penyamaran.
SELECT * FROM personal_basic_information;Hasil berikut dikembalikan.
name | email | ip | id | phone | bank_id
------+------------------------+--------------+--------------------+-------------+------------------
*Si | wb-***@antgroup.com | 127.*.*.* | 5****************0 | *********34 | ************7800
**yao | wb-***@antgroup.com | 172.**.*.*** | 5****************6 | *********32 | ************7800
*San | jia***@alibaba-inc.com | 127.*.*.* | 1****************2 | *********23 | ************7088
(3 rows)Batalkan penyamaran untuk kolom
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.name IS null;
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.id IS null;Jalankan perintah berikut untuk melihat hasil setelah Anda membatalkan penyamaran untuk kolom.
SELECT name,id FROM personal_basic_information;Hasil berikut dikembalikan.
SELECT name,id FROM personal_basic_information;
name | id
--------+--------------------
Li Si | 510622198412248000
Li Xiaoyao | 511025198812271696
Zhang San | 142732199104050022
(3 rows)Batalkan aturan penyamaran untuk pengguna
-- Batalkan semua aturan penyamaran untuk akun BASIC$test.
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';Jalankan perintah berikut untuk melihat hasil setelah Anda membatalkan aturan penyamaran untuk pengguna.
SELECT * FROM personal_basic_information;Hasil berikut dikembalikan.
name | email | ip | id | phone | bank_id
--------+--------------------------+--------------+--------------------+-------------+------------------
Li Si | wb-hy583084@antgroup.com | 127.0.0.1 | 510622198412248000 | 15757121834 | 6252470010027800
Li Xiaoyao | wb-hy583084@antgroup.com | 172.21.4.234 | 511025198812271696 | 18215451832 | 6252470010027800
Zhang San | jiaxi.jx@alibaba-inc.com | 127.0.0.1 | 142732199104050022 | 18157161223 | 4514610803067088
(3 rows)Atur penyamaran untuk kolom JOIN
-- Contoh berikut menunjukkan cara mengonfigurasi penyamaran untuk kolom JOIN.
CREATE TABLE tbl1 (
id text
);
INSERT INTO tbl1
VALUES ('142732199102290022');
-- Kolom id pada tabel personal_basic_information sudah disamarkan.
SELECT * FROM personal_basic_information a JOIN tbl1 b ON a.id = b.id;Hasil berikut dikembalikan.
name | email | ip | id | phone | bank_id | id
------+-------+----+----+-------+---------+----
(0 rows)Gunakan Penjaga Keamanan Data untuk menyamarkan data
Anda dapat mengonfigurasi aturan penyamaran data secara manual atau menggunakan Penjaga Keamanan Data untuk menyamarkan data.
Batasan
Hanya Hologres V1.1 dan versi selanjutnya yang mendukung penyamaran data menggunakan Penjaga Keamanan Data.
CatatanJika instans Anda versi sebelum V1.1, lihat Kesalahan umum selama persiapan peningkatan atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi selengkapnya, lihat Cara mendapatkan dukungan online lebih lanjut.
Untuk mengidentifikasi data sensitif, Penjaga Keamanan Data menonaktifkan penyamaran data untuk akun Alibaba Cloud.
Penjaga Keamanan Data mengambil sampel data setiap hari pukul 09:00:00. Kemudian, Penjaga Keamanan Data mengidentifikasi data sensitif dan mengonfigurasi aturan penyamaran data untuk kolom yang berisi data sensitif yang teridentifikasi.
Anda dapat menggunakan Penjaga Keamanan Data untuk menyamarkan data di Hologres di wilayah berikut: Tiongkok (Beijing), Tiongkok (Zhangjiakou), Tiongkok (Shanghai), Tiongkok (Hangzhou), Tiongkok (Shenzhen), Tiongkok (Hong Kong), Singapura, Jerman (Frankfurt), Malaysia (Kuala Lumpur), Indonesia (Jakarta), dan AS (Silicon Valley).
Prosedur
Aktifkan fitur penyamaran data.
Penyamaran data dinonaktifkan secara default. Untuk mengaktifkan fitur ini untuk database, Anda harus masuk ke database sebagai superuser dan menjalankan perintah berikut.
-- Instal ekstensi penyamaran data. CREATE EXTENSION IF NOT EXISTS hg_anon; -- Aktifkan penyamaran data untuk database yang ditentukan. Secara default, fitur ini dinonaktifkan. ALTER DATABASE <db_name> SET hg_anon_enable = on;db_name menentukan nama database tempat Anda ingin mengaktifkan penyamaran data.
PentingParameter
hg_anon_enableadalah parameter GUC. Setelah Anda menjalankan perintah ALTER DATABASE, pengaturan baru tidak berlaku untuk koneksi saat ini.Anda dapat menjalankan pernyataan SQL berikut untuk memeriksa apakah pengaturan sudah berlaku.
SHOW hg_anon_enable;
Tetapkan database yang akan disamarkan.
Masuk ke konsol Penjaga Keamanan Data. Untuk informasi selengkapnya, lihat Buka konsol Penjaga Keamanan Data.
Di panel navigasi sebelah kiri, pilih untuk membuka halaman Data Identification Rules.
Di halaman Sensitive Data Identification, buat aturan identifikasi data. Untuk informasi selengkapnya, lihat Aturan identifikasi data.
Di panel navigasi sebelah kiri, klik Data Masking Management untuk membuka halaman Data Masking Management.
Dari daftar drop-down Masking Scenario, pilih Penyamaran tampilan Hologres (hologres_display_desense_code), lalu klik Select Masking Database.
Di kotak dialog Authorize Account Masking, pilih database yang ingin Anda samarkan dari daftar Unmasked Databases dan pindahkan ke daftar Masked Databases. Pilih I Agree To Authorize Data Security Guard To Mask This Database, lalu klik OK.

Di halaman Data Masking Management, klik Create Masking Rule di pojok kanan atas. Untuk informasi selengkapnya, lihat Manajemen penyamaran data. Sistem kemudian akan menyamarkan data di database yang Anda tentukan.
FAQ
Data tidak disamarkan setelah saya mengikuti contoh
Gejala: Data tidak disamarkan setelah prosedur dalam contoh dijalankan.
Kemungkinan penyebab:
Penyamaran data dinonaktifkan untuk pengguna tertentu.
Label penyamaran tidak dikonfigurasi.
Solusi:
Jalankan perintah SQL berikut untuk memeriksa apakah penyamaran data dinonaktifkan untuk pengguna tertentu.
SELECT usename, label FROM pg_shseclabel s INNER JOIN pg_catalog.pg_user u on s.objoid = u.usesysid;Secara default, hasil kueri kosong. Hal ini menunjukkan bahwa aturan penyamaran data diaktifkan untuk semua pengguna. Jika hasil kueri tidak kosong, Anda harus mengaktifkan penyamaran data untuk pengguna tersebut.
Jalankan pernyataan SQL berikut untuk memeriksa label penyamaran yang dikonfigurasi.
SHOW hg_anon_labels;Jika hasilnya tidak berisi label seperti ip, jalankan perintah SQL berikut untuk mengonfigurasi label penyamaran.
ALTER DATABASE compress_test SET hg_anon_labels = '[ {"label":"ip", "method":{"desensType":"mask", "type":"ip"}}, {"label":"email", "method":{"desensType":"mask", "type":"email"}}, {"label":"name", "method":{"desensType":"mask", "type":"name"}}, {"label":"id", "method":{"desensType":"mask", "type":"id"}}, {"label":"phone", "method":{"desensType":"mask", "type":"phone"}}, {"label":"bank_id", "method":{"desensType":"mask", "type":"bank_id"}}, {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}}, {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}} ]';Untuk informasi selengkapnya tentang aturan yang sesuai dengan label-label ini, lihat Nilai label_name yang telah ditentukan sebelumnya.