Hologres menyediakan fitur penyamaran data yang memungkinkan Anda menetapkan aturan masking di tingkat kolom. Saat diaktifkan, kueri yang melibatkan informasi sensitif akan mengembalikan hasil yang telah dimasking, sehingga meningkatkan perlindungan terhadap data sensitif dan pribadi. Topik ini menjelaskan cara mengaktifkan, mengkueri, dan menghapus penyamaran data di Hologres.
Informasi latar belakang
Era data besar telah memperkenalkan teknologi seperti data besar, cloud computing, dan artificial intelligence, yang memungkinkan penambangan dan analisis data secara mendalam untuk membuka nilai besar dalam set data skala besar. Namun, hal ini juga menimbulkan tantangan dalam melindungi informasi sensitif dan pribadi.
Penyamaran data Hologres memungkinkan Anda mengonfigurasi kebijakan masking baik di tingkat pengguna maupun kolom. Ketika suatu kueri melibatkan data sensitif, hasilnya secara otomatis dimasking. Hal ini memungkinkan berbagi, menambang, dan menganalisis data secara efisien sekaligus memastikan informasi sensitif dan pribadi tetap tidak dapat diidentifikasi, sehingga meningkatkan perlindungan data.
Perbandingan versi
Mulai dari V3.1, Hologres telah mengoptimalkan perilaku penyamaran datanya. Tabel berikut membandingkan fitur-fitur pada V3.1 dan versi setelahnya dengan versi-versi sebelumnya untuk membantu Anda menggunakan penyamaran data secara efektif.
Feature | V3.1 dan yang lebih baru | V3.0 dan yang lebih lama |
Masking for non-TEXT fields |
Mendukung pengaturan kebijakan masking default untuk tipe seperti INT, FLOAT, dan array. Ini hanya berlaku ketika kebijakan masking diatur ke nilai default. Untuk informasi lebih lanjut, lihat Default value. |
Tidak didukung. Namun, Anda dapat melewati masking menggunakan CAST TEXT. Hal ini tidak disarankan. |
View |
Hasil disamarkan. |
Hasil tidak dimasking. Hal ini tidak disarankan. |
Masked fields in JOIN or WHERE clauses |
Hasilnya kosong. |
Hasil tidak dimasking. Hal ini tidak disarankan. |
|
Flink mengonsumsi binary logs dari bidang yang dimasking |
|
|
|
MaxCompute membaca langsung bidang yang dimasking |
Menolak pembacaan langsung bidang Hologres yang dimasking dari MaxCompute. |
Pembacaan didukung. Hal ini tidak disarankan. |
Persiapan
Sebelum menggunakan penyamaran data, Superuser harus mengaktifkan parameter berikut di tingkat database.
-- Dieksekusi oleh superuser
CREATE EXTENSION IF NOT EXISTS hg_anon;
ALTER DATABASE <current_db> SET hg_anon_enable = on;
Setelah menjalankan kode di atas, sistem akan menggunakan perilaku penyamaran data sesuai dengan versi instans Hologres. Anda juga dapat memilih perilaku masking sesuai kebutuhan:
-
Jika perilaku penyamaran data di V3.1 atau versi setelahnya memiliki bug signifikan yang menyebabkan hasil tak terduga, Anda dapat menggunakan parameter berikut untuk kembali ke perilaku versi V3.0 dan sebelumnya.
CALL hologres.set_hg_anon_version(1); -
Instans V3.0 dan sebelumnya tidak mendukung prosedur tersimpan set_hg_anon_version. Jika instans yang telah menggunakan fitur masking ditingkatkan ke V3.1, Anda dapat menjalankan perintah berikut untuk mengaktifkan fitur masking V3.1. Jika tidak, sistem akan terus menggunakan fitur masking lama.
CALL hologres.set_hg_anon_version(2);Catatan-
Jika pernyataan berhasil dijalankan, perilaku penyamaran data V3.1 dan setelahnya diaktifkan.
-
Jika pernyataan gagal dengan log error
"Error: not safe to upgrade to hg_anon version 2", fitur gagal diaktifkan. Hal ini karena masking diatur untuk tipe kolom non-TEXT/VARCHAR/CHAR di DB saat ini, dan hasil masking untuk V3.1 dan setelahnya tidak sesuai harapan. Anda perlu memperbaiki perilaku masking tersebut.
-
Batasan
-
Mengimpor data dari tabel dan kolom dengan aturan masking ke tabel dan kolom tanpa aturan masking tidak didukung. Pesan error terkait adalah sebagai berikut.
Error: ERROR: The insert table has not set SECURITY LABEL -
Kueri UNION dan DISTINCT pada tabel dengan aturan masking tidak didukung. Pesan error terkait adalah sebagai berikut.
Error: ERROR: UNION is not support on security item -
Penyamaran data dapat memengaruhi kinerja kueri. Dampaknya tergantung pada metode masking dan volume data. Kinerja dapat menurun 10% hingga 20%. Dalam skenario ekstrem, kinerja dapat menurun beberapa kali lipat.
-
Menetapkan aturan masking untuk tabel eksternal tidak didukung.
Penyamaran data
Menetapkan aturan penyamaran
Hologres mendukung pengaturan penyamaran data untuk kolom target atau pengguna target. Sebelum menetapkan penyamaran data, Anda harus mengaktifkan parameter GUC penyamaran data. Untuk informasi lebih lanjut, lihat Persiapan.
-
Sintaks
-
Menetapkan kebijakan penyamaran untuk kolom
Untuk memask data di beberapa kolom, jalankan 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]';
-
-
Deskripsi 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 masking preset dalam sistem. Anda dapat menjalankan
SHOW hg_anon_labels;untuk melihat `label_name` yang ditetapkan untuk database saat ini.user_name
ID akun. Anda dapat memperolehnya dari halaman Informasi Pengguna.
masked|unmasked
-
masked: Gunakan data masking.
-
unmasked: Jangan gunakan data masking.
Tabel berikut menjelaskan nilai label_name preset.
Tipe data
label_name
Kebijakan penyamaran
Jenis penyamaran
Deskripsi
Contoh masking
TEXT
name
name
mask
Masking nama.
-
Sebelum: Li Hua; Setelah: * Hua.
-
Sebelum: Wang Xiaoqiang; Setelah: ** Qiang.
email
email
mask
Masking alamat email.
Sebelum: lihu***@alibaba.com; Setelah: lih***@alibaba.com.
ip
ip
mask
Masking alamat IP.
Sebelum: 1.2.3.4; Setelah: 1.*.*.*.
id
id
mask
Masking nomor KTP.
Sebelum: 110345188812011234; Setelah: 1****************4.
phone
phone
mask
Masking nomor telepon.
Sebelum: 1390000****; Setelah: *********34.
bank_id
bank_id
mask
Masking akun kartu bank atau kartu kredit.
Sebelum: 2349867902834701928; Setelah: ***************1928.
hash
md5
hash
Gunakan algoritma MD5 untuk masking.
Sebelum: Wenyi West Road, Hangzhou, Zhejiang; Setelah: dbf894b409d4a2ef17dfd9c7fdcafcd8.
first_mask
first_mask
mask
Aturan `first_mask` didefinisikan untuk hanya menampilkan karakter pertama.
Sebelum: 123456789; Setelah: 1********.
Tipe seperti INT dan FLOAT
Default
default_value
default_value
Mask dengan nilai default.
Catatan-
Jika `label_name` tidak ada saat Anda menetapkan data masking, sistem akan kembali ke masking nilai default.
Ini hanya didukung di Hologres V3.1 dan yang lebih baru.
Pemetaan antara tipe data dan nilai masked default adalah sebagai berikut:
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 masking yang ditetapkan
-
Lihat masking yang ditetapkan untuk kolom
-- Lihat masking yang ditetapkan untuk kolom 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; -
Lihat masking yang ditetapkan untuk pengguna
-- Lihat aturan masking yang ditetapkan untuk pengguna 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 masking yang ditetapkan tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikannya dengan mengubah 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 menjalankan perintah
ALTER DATABASE, perubahan tidak berlaku pada koneksi saat ini. Anda harus membuat koneksi baru. Anda dapat menggunakan perintah berikut untuk memeriksa apakah pengaturan 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":""}}]';Deskripsi parameter:
Item penyamaran
Deskripsi konten masking
Contoh hasil masking
{"desensType":"mask", "type":"ip"}
Masking alamat IP.
192.*.*.*
{"desensType":"mask", "type":"email"}
Masking alamat email.
abc***@example.net
{"desensType":"mask", "type":"name"}
Masking nama.
*Lima
{"desensType":"hash", "type":"md5", "salt":""}
Masking 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}}
Masking konten kustom.
None
Contoh penggunaan
Data sampel
Siapkan 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***@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
-- Buat fungsi ekstensi hg_anon.
CREATE EXTENSION IF NOT EXISTS hg_anon;
-- Aktifkan fitur data masking untuk database hg_anon_demo.
ALTER DATABASE hg_anon_demo SET hg_anon_enable = on;
-- Tetapkan aturan masking 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, gunakan perintah berikut untuk melihat hasil yang telah dimasking.
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;
Gunakan perintah berikut untuk melihat hasil setelah membatalkan masking 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
-- Batalkan semua masking untuk akun BASIC$test.
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';
Gunakan perintah berikut untuk melihat hasil setelah membatalkan masking 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
-- Contoh penetapan masking untuk kolom JOIN
CREATE TABLE tbl1 (
id text
);
INSERT INTO tbl1
VALUES ('142732199102290022');
-- Kolom id tabel personal_basic_information sudah dimasking.
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 setelahnya yang mendukung penggunaan Data Security Guard untuk penyamaran data.
CatatanJika instans Anda sebelum V1.1, lihat Kesalahan persiapan upgrade umum atau berikan masukan di grup DingTalk Hologres. Untuk informasi lebih lanjut, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.
-
Untuk mendeteksi data sensitif, Data Security Guard menetapkan aturan agar tidak memask data untuk akun root.
-
Saat ini, setiap hari pukul 09.00.00, Data Security Guard mengambil sampel data, mengidentifikasi data sensitif, dan menetapkan aturan masking untuk kolom data sensitif yang teridentifikasi.
-
Saat ini, Hologres mendukung penyamaran data menggunakan Data Security Guard 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).
-
-
Penggunaan
-
Aktifkan fitur masking.
Fitur penyamaran data dinonaktifkan secara default. Pengguna dengan izin Superuser harus menjalankan perintah berikut di database yang sesuai untuk mengaktifkannya.
-- Instal EXTENSION data masking CREATE EXTENSION IF NOT EXISTS hg_anon; -- Aktifkan fitur data masking untuk database yang ditentukan. Fitur ini dinonaktifkan secara default. ALTER DATABASE <db_name> SET hg_anon_enable = on;db_name adalah database tempat Anda ingin mengaktifkan penyamaran data.
Penting-
hg_anon_enableadalah GUC. Perubahan tidak berlaku pada koneksi saat ini setelah Anda menjalankan perintah ALTER DATABASE. -
Anda dapat menggunakan pernyataan SQL berikut untuk memeriksa apakah pengaturan telah berlaku.
SHOW hg_anon_enable;
-
-
Tetapkan database untuk masking.
Login ke Konsol Penjaga Keamanan Data. Untuk informasi selengkapnya, lihat Masuk ke Penjaga Keamanan Data.
-
Di panel navigasi sebelah kiri, klik untuk membuka halaman Data Identification Rules.
-
Di halaman Sensitive Data Identification, buat aturan identifikasi data. Untuk informasi lebih lanjut, lihat Data identification rules.
-
Di panel navigasi sebelah kiri, klik Data Masking Management untuk membuka halaman Data Masking Management.
-
Di daftar drop-down Masking Scenario, pilih Hologres display masking (hologres_display_desense_code), lalu klik Select Database to Mask di sebelah kanan.
-
Di kotak dialog Authorize Account for Masking, pilih database yang akan dimasking dari daftar Unmasked Databases untuk memindahkannya 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 New Masking Rule di pojok kanan atas. Untuk informasi lebih lanjut, lihat Data masking management. Sistem kemudian akan memask database yang Anda tetapkan.
-
FAQ
Data tidak dimasking setelah mengikuti contoh penggunaan
-
Gejala: Setelah mengikuti contoh penggunaan, Anda menemukan bahwa data yang dikueri tidak dimasking.
-
Kemungkinan penyebab:
-
Aturan ditetapkan agar tidak memask data untuk beberapa pengguna.
-
Tidak ada label masking yang ditetapkan.
-
-
Solusi:
-
Jalankan perintah SQL berikut untuk memeriksa apakah aturan ditetapkan agar tidak memask data untuk 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 pernyataan SQL ini kosong, yang berarti data harus dimasking untuk semua pengguna. Jika hasilnya tidak kosong, tetapkan pengguna untuk penyamaran data.
-
Gunakan pernyataan SQL berikut untuk memeriksa label masking yang ditetapkan.
SHOW hg_anon_labels;Jika hasilnya tidak berisi label seperti ip, jalankan perintah SQL berikut untuk menetapkan label masking.
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 aturan yang sesuai dengan label di atas, lihat Detail label_name preset.
-