Hologres menyediakan fitur penyamaran data yang memungkinkan Anda menetapkan aturan penyamaran di tingkat kolom. Setelah fitur ini diaktifkan, data akan disamarkan dalam hasil kueri yang melibatkan informasi sensitif, sehingga meningkatkan perlindungan terhadap data sensitif dan pribadi. Topik ini menjelaskan cara mengaktifkan, menampilkan, dan menghapus aturan penyamaran data di Hologres.
Informasi latar belakang
Teknologi baru seperti data besar, cloud computing, dan artificial intelligence semakin umum digunakan. Teknologi-teknologi ini mendukung penambangan dan analisis data secara mendalam untuk mengungkap nilai dari data. Namun, penggunaan data yang luas ini juga menimbulkan tantangan dalam melindungi informasi sensitif dan pribadi.
Fitur penyamaran data di Hologres memungkinkan Anda menetapkan aturan penyamaran di tingkat pengguna dan kolom. Saat suatu kueri melibatkan data sensitif, hasilnya akan disamarkan. Dengan demikian, penyamaran data memungkinkan berbagi, menambang, dan menganalisis data secara efisien sekaligus memastikan bahwa informasi sensitif dan pribadi tetap tidak dapat diidentifikasi, sehingga meningkatkan perlindungan terhadap data tersebut.
Perbandingan versi
Mulai dari V3.1, Hologres telah mengoptimalkan perilaku penyamaran datanya. Tabel berikut membandingkan fitur-fitur pada V3.1 dan versi yang lebih baru dengan versi-versi sebelumnya untuk membantu Anda menggunakan penyamaran data secara lebih baik.
Feature | V3.1 dan yang lebih baru | V3.0 dan yang lebih lama |
Masking for non-TEXT fields | Anda dapat menetapkan kebijakan penyamaran default untuk tipe data seperti INT, FLOAT, dan array. Ini hanya berlaku jika kebijakan penyamaran nilai default ditetapkan. Untuk informasi selengkapnya, lihat Default value. | Tidak didukung. Anda dapat menggunakan solusi sementara CAST TEXT, tetapi ini tidak disarankan. |
View | Hasil disamarkan. | Hasil tidak disamarkan (tidak disarankan). |
Masked fields in JOIN or WHERE clauses | Hasilnya kosong. | Hasil tidak disamarkan (tidak disarankan). |
Flink consumption of binary logs for masked fields |
|
|
Direct read of masked fields from MaxCompute | Pembacaan langsung kolom Hologres yang disamarkan dari MaxCompute dilarang. | Pembacaan didukung (tidak disarankan). |
Persiapan
Sebelum menggunakan penyamaran data, superuser harus mengaktifkan parameter-parameter berikut di tingkat database.
-- Run as a superuser.
CREATE EXTENSION IF NOT EXISTS hg_anon;
ALTER DATABASE <current_db> SET hg_anon_enable = on;Setelah menjalankan perintah di atas, sistem menerapkan perilaku penyamaran data yang sesuai dengan versi instans Hologres Anda. Anda juga dapat memilih perilaku penyamaran tertentu sesuai kebutuhan:
Jika perilaku penyamaran data di V3.1 atau yang lebih baru memiliki masalah signifikan dan tidak memenuhi kebutuhan bisnis Anda, Anda dapat kembali ke perilaku V3.0 dan yang lebih lama menggunakan parameter berikut.
CALL hologres.set_hg_anon_version(1);Instans V3.0 dan yang lebih lama tidak mendukung prosedur tersimpan `set_hg_anon_version`. Jika instans yang sudah menggunakan penyamaran data ditingkatkan ke V3.1, Anda harus menjalankan perintah berikut untuk mengaktifkan fitur penyamaran V3.1. Jika tidak, sistem akan terus menggunakan fitur penyamaran lama.
CALL hologres.set_hg_anon_version(2);CatatanJika pernyataan berhasil dieksekusi, perilaku penyamaran data untuk V3.1 dan yang lebih baru diaktifkan.
Jika pernyataan gagal dengan pesan error `
"Error: not safe to upgrade to hg_anon version 2"`, pengaktifan fitur gagal. Kegagalan ini terjadi karena penyamaran ditetapkan untuk tipe kolom non-TEXT, non-VARCHAR, atau non-CHAR di database saat ini, dan hasil penyamaran di V3.1 dan yang lebih baru tidak akan sesuai harapan. Anda harus memperbaiki konfigurasi penyamaran tersebut.
Batasan
Anda tidak dapat mengimpor data dari tabel dan kolom dengan aturan penyamaran ke tabel dan kolom tanpa aturan penyamaran. Pesan error terkait adalah sebagai berikut:
Error reason: ERROR: The insert table has not set SECURITY LABELKueri UNION dan DISTINCT pada tabel dengan aturan penyamaran tidak didukung. Pesan error terkait adalah sebagai berikut:
ERROR: UNION is not support on security itemPenyamaran data dapat memengaruhi performa kueri. Dampaknya tergantung pada metode penyamaran dan volume data. Performa dapat menurun 10% hingga 20%. Dalam kasus ekstrem, performa bisa menjadi beberapa kali lebih lambat.
Anda tidak dapat menetapkan aturan penyamaran untuk tabel eksternal.
Penyamaran data
Menetapkan aturan penyamaran
Hologres mendukung penetapan aturan penyamaran data untuk kolom target atau pengguna target. Sebelum menetapkan aturan penyamaran, pastikan parameter GUC penyamaran data diaktifkan. Untuk informasi selengkapnya, lihat Persiapan.
Sintaks
Menetapkan kebijakan penyamaran untuk kolom
Untuk menyamarkan data di beberapa kolom, Anda dapat mengeksekusi pernyataan ini beberapa kali.
SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value';Menetapkan kebijakan 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 dikapsulkan dalam Hologres. Anda harus memanggil Fungsi ekstensi ini untuk mengaktifkan fitur penyamaran data.
tablename
Nama tabel yang berisi kolom yang akan disamarkan.
col_name
Nama kolom yang akan disamarkan.
label_name
Fungsi penyamaran yang telah ditentukan. Anda dapat menjalankan
SHOW hg_anon_labels;untuk melihat nilai `label_name` yang ditetapkan untuk database saat ini.user_name
ID akun. Anda dapat memperolehnya dari halaman Informasi Pengguna.
masked|unmasked
`masked`: Gunakan penyamaran data.
`unmasked`: Jangan gunakan penyamaran data.
Tabel berikut menjelaskan nilai `label_name` yang telah ditentukan.
Tipe data
label_name
Kebijakan penyamaran
Jenis penyamaran
Deskripsi
Contoh Penyamaran Data
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: lihu***@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: 1390000****; Setelah penyamaran: *********34.
bank_id
bank_id
mask
Menyamarkan nomor kartu bank atau kartu kredit.
Sebelum penyamaran: 2349867902834701928; Setelah penyamaran: ***************1928.
hash
md5
hash
Menyamarkan data menggunakan algoritma MD5.
Sebelum penyamaran: Wenyixi Road, Hangzhou, Zhejiang; Setelah penyamaran: dbf894b409d4a2ef17dfd9c7fdcafcd8.
first_mask
first_mask
mask
Menetapkan aturan `first_mask` yang hanya menampilkan karakter pertama.
Sebelum penyamaran: 123456789; Setelah penyamaran: 1********.
Tipe seperti INT dan FLOAT
Default
default_value
default_value
Menyamarkan data dengan nilai default.
CatatanJika `label_name` tidak ada saat Anda menetapkan penyamaran data, sistem akan kembali ke penyamaran nilai default.
Ini hanya didukung di Hologres V3.1 dan yang lebih baru.
Tabel berikut memetakan tipe data ke nilai penyamaran default-nya:
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
Menampilkan aturan penyamaran
Menampilkan aturan penyamaran yang ditetapkan untuk kolom
-- View masking rules set for columns. SELECT c.relname, a.attname, provider, label FROM pg_seclabel s JOIN pg_class c ON s.objoid = c.oid JOIN pg_attribute a ON s.objoid = a.attrelid AND s.objsubid = a.attnum;Menampilkan aturan penyamaran yang ditetapkan untuk pengguna
-- View masking rules set for users. SELECT usename, label FROM pg_shseclabel s INNER JOIN pg_catalog.pg_user u ON s.objoid = u.usesysid;
Memodifikasi aturan penyamaran kustom
Jika aturan penyamaran data yang dikonfigurasi tidak memenuhi kebutuhan bisnis Anda, Anda dapat menyesuaikannya dengan memodifikasi parameter GUC hg_anon_lables.
Sintaks
-- label_name is your custom name, and method is a built-in Hologres method. ALTER DATABASE <db_name> SET hg_anon_labels = '[ {"label": <label_name1>, "method":<method1>}, {"label": <label_name2>, "method":<method2>}, ... ]';Setelah Anda mengeksekusi perintah
ALTER DATABASE, koneksi saat ini menjadi tidak valid. Anda harus membuat koneksi baru. Anda dapat mengeksekusi perintah berikut untuk memeriksa apakah pengaturan baru telah 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 konten yang disamarkan
Contoh hasil 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.
Five
{"desensType":"hash", "type":"md5", "salt":""}
Menyamarkan data dengan 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}}
Menyamarkan konten kustom.
None
Contoh
Data sampel
Anda dapat menyiapkan sumber data atau menggunakan data bisnis Anda sendiri.
-- Create a database.
CREATE DATABASE hg_anon_demo;
-- Create a sample data table.
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);
-- Insert sample data.
INSERT INTO personal_basic_information(name,email,ip,id,phone,bank_id) VALUES
('Zhang San','jiaxi***@alibaba-inc.com','127.0.0.1','142732199104050022','18157161223','4514610803067088'),
('Li Si','wb-hy583***@antgroup.com','127.0.0.1','510622198412248000','15757121834','6252470010027800'),
('Li Xiaoyao','wb-hy583***@antgroup.com','172.21.4.234','511025198812271696','18215451832','6252470010027800');Menetapkan aturan penyamaran untuk kolom
-- Create the hg_anon extension function.
CREATE EXTENSION IF NOT EXISTS hg_anon;
-- Enable data masking for the hg_anon_demo database.
ALTER DATABASE hg_anon_demo SET hg_anon_enable = on;
-- Set the masking rule for each column.
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, Anda dapat menjalankan perintah berikut untuk melihat hasil yang disamarkan.
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)Membatalkan 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;Anda dapat menjalankan perintah berikut untuk melihat hasil setelah membatalkan aturan 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)Membatalkan aturan penyamaran untuk pengguna
-- Cancel all masking for the basic account.
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';Anda dapat menjalankan perintah berikut untuk melihat hasil setelah membatalkan aturan penyamaran untuk pengguna.
SELECT * FROM personal_basic_information;Hasil berikut dikembalikan.
name | email | ip | id | phone | bank_id
--------+--------------------------+--------------+--------------------+-------------+------------------
Li Si | wb-hy583***@antgroup.com | 127.0.0.1 | 510622198412248000 | 15757121834 | 6252470010027800
Li Xiaoyao | wb-hy583***@antgroup.com | 172.21.4.234 | 511025198812271696 | 18215451832 | 6252470010027800
Zhang San | jiaxi***@alibaba-inc.com | 127.0.0.1 | 142732199104050022 | 18157161223 | 4514610803067088
(3 rows)Menetapkan penyamaran untuk kolom JOIN
-- Example of setting masking for a JOIN column.
CREATE TABLE tbl1 (
id text
);
INSERT INTO tbl1
VALUES ('142732199102290022');
-- The id column of the personal_basic_information table is already masked.
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)Menggunakan Penjaga Keamanan Data untuk penyamaran data
Anda dapat menetapkan aturan penyamaran secara manual atau menggunakan Penjaga Keamanan Data untuk penyamaran data.
Batasan
Hanya Hologres V1.1 dan yang lebih baru yang mendukung penyamaran data menggunakan Penjaga Keamanan Data.
CatatanJika instans Anda lebih lama dari V1.1, lihat Kesalahan persiapan upgrade umum atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi selengkapnya, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.
Untuk mendeteksi data sensitif, Penjaga Keamanan Data mengonfigurasi aturan untuk mengecualikan akun root dari penyamaran data.
Setiap hari pukul 09.00.00, Penjaga Keamanan Data melakukan sampling data, mendeteksi data sensitif, dan menetapkan aturan penyamaran untuk kolom data sensitif yang teridentifikasi.
Saat ini, penyamaran data dengan Penjaga Keamanan Data didukung untuk Hologres di wilayah-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).
Penggunaan
Aktifkan fitur penyamaran data.
Fitur penyamaran data dinonaktifkan secara default. Pengguna dengan izin superuser harus menjalankan perintah berikut pada database yang sesuai untuk mengaktifkannya.
-- Install the data masking EXTENSION. CREATE EXTENSION IF NOT EXISTS hg_anon; -- Enable data masking for the specified database. The feature is disabled by default. ALTER DATABASE <db_name> SET hg_anon_enable = on;db_name adalah database tempat Anda ingin mengaktifkan penyamaran data.
Pentinghg_anon_enableadalah parameter GUC. Setelah Anda menjalankan perintah ALTER DATABASE, perubahan tersebut tidak berlaku pada koneksi saat ini.Anda dapat menjalankan perintah SQL berikut untuk memeriksa apakah pengaturan telah berlaku.
SHOW hg_anon_enable;
Tetapkan database untuk penyamaran data.
Login ke Konsol Penjaga Keamanan Data. Untuk informasi selengkapnya, lihat Masuk ke Penjaga Keamanan Data.
Pada panel navigasi, klik untuk menuju halaman Data Detection Rules.
Pada halaman Sensitive Data Detection, buat aturan deteksi data. Untuk informasi selengkapnya, lihat Data detection rules.
Pada panel navigasi, klik Data Masking Management untuk menuju halaman Data Masking Management.
Dari daftar drop-down Masking Scenario, pilih Hologres display masking (hologres_display_desense_code), lalu klik Select Masking Database di sebelah kanan.
Pada dialog Authorize Account for Masking, pilih database yang akan disamarkan 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.

Pada halaman Data Masking Management, klik Create Masking Rule di pojok kanan atas. Untuk informasi selengkapnya, lihat Data Masking Management. Sistem kemudian akan menyamarkan database yang telah Anda tetapkan.
FAQ
Data tidak disamarkan setelah mengikuti contoh
Gejala: Setelah mengikuti langkah-langkah dalam contoh, data yang dikueri tidak disamarkan.
Kemungkinan penyebab:
Aturan dikonfigurasi untuk tidak menyamarkan data bagi beberapa pengguna.
Label penyamaran belum ditetapkan.
Solusi:
Jalankan perintah SQL berikut untuk memeriksa apakah aturan dikonfigurasi untuk tidak menyamarkan data bagi beberapa pengguna.
SELECT usename, label FROM pg_shseclabel s INNER JOIN pg_catalog.pg_user u on s.objoid = u.usesysid;Secara default, hasil kueri kosong. Artinya penyamaran data diperlukan untuk semua pengguna. Jika hasilnya tidak kosong, Anda harus menetapkan pengguna untuk penyamaran data.
Jalankan perintah SQL berikut untuk memeriksa label penyamaran yang dikonfigurasi.
SHOW hg_anon_labels;Jika hasilnya tidak mencakup label seperti ip, Anda dapat menjalankan perintah SQL berikut untuk menetapkan 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 tentang aturan yang sesuai dengan label di atas, lihat Detail nilai label_name yang telah ditentukan.