Hologres menyediakan fitur data masking untuk melindungi data sensitif di tingkat kolom. Saat diaktifkan, fitur ini secara otomatis menyembunyikan data sensitif dalam hasil kueri guna meningkatkan keamanan data. Topik ini menjelaskan cara mengaktifkan data masking dan mengelola aturan penyamarannya.
Latar Belakang
Penerapan luas teknologi data besar, seperti komputasi awan dan AI, membuka nilai data yang belum pernah ada sebelumnya. Namun, hal ini juga menimbulkan tantangan signifikan dalam melindungi informasi sensitif dan pribadi.
Data masking Hologres memungkinkan Anda menetapkan aturan di tingkat pengguna dan kolom. Saat kueri dijalankan, data disembunyikan sesuai aturan tersebut sehingga mencegah eksposur tidak sah terhadap informasi sensitif. Dengan demikian, Anda dapat berbagi dan menganalisis data secara aman sambil memastikan informasi pribadi tetap tidak dapat diidentifikasi.
Perbandingan versi
Hologres mengoptimalkan perilaku data masking mulai dari V3.1. Tabel berikut membandingkan fitur-fitur pada V3.1 dan versi setelahnya dengan versi-versi sebelumnya.
|
Feature |
V3.1 and later |
V3.0 and earlier |
|
Masking untuk tipe data non-TEXT |
Mendukung kebijakan masking default untuk tipe data seperti INT, FLOAT, dan array. Kebijakan ini hanya berlaku jika kebijakan masking diatur untuk menggunakan nilai default. Untuk informasi lebih lanjut, lihat Default values. |
Tidak didukung. Anda dapat mengakali ini dengan menggunakan |
|
View |
Hasil disembunyikan. |
Hasil tidak disembunyikan. (Tidak disarankan) |
|
JOIN atau klausa WHERE dengan kolom yang dimasking |
Hasilnya kosong. |
Hasil tidak disembunyikan. (Tidak disarankan) |
|
Konsumsi log biner Flink untuk kolom yang dimasking |
|
|
|
Bacaan langsung kolom yang dimasking dari MaxCompute |
Melarang MaxCompute membaca langsung kolom Hologres yang dimasking. |
Pembacaan didukung. (Tidak disarankan) |
Periksa versi data masking
SELECT hologres.get_hg_anon_version();
Prasyarat
Sebelum menggunakan data masking, superuser harus menjalankan perintah 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 pernyataan ini, perilaku data masking ditentukan oleh versi instans Hologres Anda. Anda juga dapat memilih secara manual perilaku tertentu sesuai kebutuhan bisnis:
-
Jika perilaku data masking pada V3.1 atau versi setelahnya tidak sesuai harapan, Anda dapat kembali ke perilaku V3.0 dengan menjalankan pernyataan berikut:
CALL hologres.set_hg_anon_version(1); -
Instans V3.0 dan versi sebelumnya tidak mendukung prosedur tersimpan
set_hg_anon_version. Jika Anda melakukan upgrade instans yang sudah memiliki data masking ke V3.1, Anda dapat menjalankan pernyataan berikut untuk mengaktifkan fitur baru V3.1. Jika tidak, sistem akan mempertahankan perilaku data masking lama.CALL hologres.set_hg_anon_version(2);Catatan-
Jika pernyataan berhasil dijalankan, perilaku data masking untuk V3.1 dan versi setelahnya diaktifkan.
-
Jika pernyataan gagal dieksekusi dan log error menampilkan
"Error: not safe to upgrade to hg_anon version 2", fitur tersebut gagal diaktifkan. Hal ini karena data masking dikonfigurasi untuk kolom dengan tipe selain TEXT, VARCHAR, atau CHAR di database saat ini. Pada versi V3.1 dan setelahnya, hasil data masking tidak sesuai harapan, sehingga perilaku data masking perlu dikoreksi.
-
Batasan
-
Anda tidak dapat mengimpor data dari tabel yang memiliki aturan masking ke tabel yang tidak memiliki aturan masking. Error berikut dikembalikan:
ERROR: The insert table has not set SECURITY LABEL -
Anda tidak dapat menjalankan kueri
UNIONatauDISTINCTpada tabel dengan aturan masking. Error berikut dikembalikan:ERROR: UNION is not support on security item -
Data masking dapat memengaruhi performa kueri. Dampaknya bervariasi tergantung metode masking dan volume data. Performa dapat menurun 10% hingga 20%, dan lebih besar lagi dalam kasus ekstrem.
-
Anda tidak dapat menetapkan aturan masking untuk tabel eksternal.
Gunakan data masking
Konfigurasikan aturan masking
Hologres memungkinkan Anda menetapkan aturan data masking untuk kolom atau pengguna tertentu. Sebelum mengonfigurasi aturan masking, Anda harus mengaktifkan parameter GUC data masking. Untuk informasi lebih lanjut, lihat Prasyarat.
-
Sintaksis
-
Tetapkan kebijakan masking untuk kolom
Untuk menyembunyikan data di beberapa kolom, Anda harus menjalankan pernyataan ini untuk setiap kolom.
SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value'; -
Tetapkan kebijakan masking untuk pengguna
SECURITY LABEL FOR hg_anon ON ROLE <user_name> IS '[<label_name>|all]:[masked|unmasked]';
-
-
Parameter
Parameter
Description
hg_anon
Ekstensi hg_anon menyediakan fungsionalitas data masking. Anda harus menentukan hg_anon sebagai penyedia dalam pernyataan SECURITY LABEL.
tablename
Nama tabel yang berisi kolom yang akan dimasking.
col_name
Nama kolom yang akan dimasking.
label_name
Untuk fungsi desensitisasi yang telah ditentukan sistem, Anda dapat menggunakan
SHOW hg_anon_labels;untuk melihatlabel_nameyang ditetapkan di database saat ini.user_name
ID akun. Anda dapat menemukannya di halaman Security Settings.
masked|unmasked
-
masked: Gunakan data masking. -
unmasked: Jangan gunakan data masking.
Tabel berikut menjelaskan nilai
label_nameyang telah ditentukan sebelumnya.Data type
label_name
Masking policy
Masking type
Description
Example
TEXT
name
name
mask
Menyembunyikan nama.
-
Sebelum masking:
Li Hua; Setelah masking:* Hua. -
Sebelum masking:
Wang Xiaoqiang; Setelah masking:** Qiang.
email
email
mask
Menyembunyikan alamat email.
Sebelum masking:
lihuang@alibaba.com; Setelah masking:lih***@alibaba.com.ip
ip
mask
Menyembunyikan alamat IP.
Sebelum masking:
1.2.3.4; Setelah masking:1.*.*.*.id
id
mask
Menyembunyikan nomor KTP.
Sebelum masking:
110345188812011234; Setelah masking:1****************4.phone
phone
mask
Menyembunyikan nomor telepon.
Sebelum masking:
13900001234; Setelah masking:*******1234.bank_id
bank_id
mask
Menyembunyikan nomor bank atau kartu kredit.
Sebelum masking:
2349867902834701928; Setelah masking:***************1928.hash
md5
hash
Menyembunyikan data menggunakan algoritma MD5.
Sebelum masking:
Wenyi West Road, Hangzhou, Zhejiang; Setelah masking:dbf894b409d4a2ef17dfd9c7fdcafcd8.first_mask
first_mask
mask
Aturan
first_maskhanya menampilkan karakter pertama.Sebelum masking:
123456789; Setelah masking:1********.INT, FLOAT, dan tipe numerik lainnya
Default
default_value
default_value
Menyembunyikan data dengan nilai default.
Catatan-
Jika
label_nameyang ditentukan tidak ada saat Anda mengonfigurasi data masking, sistem menggunakan masking nilai default sebagai fallback. -
Hanya didukung di Hologres V3.1 dan versi setelahnya.
Pemetaan antara tipe data dan nilai masking 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
-
Lihat aturan masking
-
Untuk melihat aturan masking yang ditetapkan untuk kolom:
--View the 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; -
Untuk melihat aturan masking yang ditetapkan untuk pengguna:
--View the masking rules set for users SELECT usename, label FROM pg_shseclabel s INNER JOIN pg_catalog.pg_user u ON s.objoid = u.usesysid;
Kustomisasi aturan masking
Jika aturan data masking yang ada tidak memenuhi kebutuhan Anda, Anda dapat membuat aturan kustom dengan memodifikasi parameter GUC hg_anon_lables.
-
Sintaksis
-- label_name is a custom name, and method specifies a built-in Hologres function. ALTER DATABASE <db_name> SET hg_anon_labels = '[ {"label": <label_name1>, "method":<method1>}, {"label": <label_name2>, "method":<method2>}, ... ]';Setelah Anda menjalankan perintah
ALTER DATABASE, koneksi saat ini menjadi tidak valid. 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":""}}]';Parameter:
Item
Description
Example result
{"desensType":"mask", "type":"ip"}
Menyembunyikan alamat IP.
192.*.*.*
{"desensType":"mask", "type":"email"}
Menyembunyikan alamat email.
abc***@example.net
{"desensType":"mask", "type":"name"}
Menyembunyikan nama.
*Wu
{"desensType":"hash", "type":"md5", "salt":""}
Menyembunyikan data menggunakan fungsi 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}}
Memungkinkan pola masking kustom, seperti menyimpan jumlah karakter tertentu di awal atau akhir string.
N/A
Contoh
Data sampel
Siapkan sumber data. Anda juga dapat 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');
Tetapkan aturan masking kolom
--Create the hg_anon extension.
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';
Dalam koneksi baru, jalankan 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)
Hapus masking 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 menghapus aturan masking untuk kolom-kolom tersebut.
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)
Hapus masking pengguna
--Cancel all masking rules for the user 'BASIC$test'.
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';
Jalankan perintah berikut untuk melihat hasil setelah menghapus aturan masking untuk pengguna tersebut.
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)
Tetapkan masking pada 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 Data Security Guard
Selain mengonfigurasi aturan masking secara manual, Anda juga dapat menggunakan Data Security Guard untuk mengotomatiskan data masking.
-
Batasan
-
Hanya Hologres V1.1 dan versi setelahnya yang mendukung penggunaan Data Security Guard untuk data masking.
CatatanJika versi instans Anda sebelum V1.1, lihat Troubleshooting upgrade preparation errors atau bergabunglah dengan grup DingTalk Hologres untuk dukungan. Untuk informasi lebih lanjut, lihat How do I get more online support?.
-
Agar deteksi data sensitif dapat dilakukan, Data Security Guard tidak menyembunyikan data untuk akun root.
-
Data Security Guard mengambil sampel data setiap hari pukul 09:00:00 (UTC+8) untuk mengidentifikasi data sensitif dan menetapkan aturan masking untuk kolom yang memuatnya.
-
Anda dapat menggunakan Data Security Guard untuk menyembunyikan data di Hologres di wilayah-wilayah berikut: China (Beijing), China (Zhangjiakou), China (Shanghai), China (Hangzhou), China (Shenzhen), China (Hong Kong), Singapura, Jerman (Frankfurt), Malaysia (Kuala Lumpur), Indonesia (Jakarta), dan AS (Silicon Valley).
-
-
Prosedur
-
Aktifkan fitur data masking.
Data masking dinonaktifkan secara default. Superuser harus menjalankan perintah berikut di database target untuk mengaktifkannya.
--Install the data masking EXTENSION. CREATE EXTENSION IF NOT EXISTS hg_anon; --Enable data masking for the specified database. It is disabled by default. ALTER DATABASE <db_name> SET hg_anon_enable = on;db_name adalah database tempat Anda ingin mengaktifkan data masking.
Penting-
hg_anon_enableadalah GUC. Setelah Anda menjalankan perintah ALTER DATABASE, perubahan tersebut tidak berlaku untuk koneksi saat ini. -
Anda dapat menjalankan pernyataan SQL berikut untuk memeriksa apakah pengaturan telah berlaku.
SHOW hg_anon_enable;
-
-
Konfigurasikan database untuk masking.
-
Login ke konsol Data Security Guard. Untuk informasi lebih lanjut, lihat Go to the Data Security Guard page.
-
Di bilah navigasi kiri, klik untuk menuju halaman Data Identification Rule.
-
Di halaman Sensitive Data Identification, buat aturan identifikasi data. Untuk informasi lebih lanjut, lihat Data identification rules.
-
Di bilah navigasi kiri, 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 Database for Masking di sebelah kanan.
-
Di kotak dialog Authorize Account for Masking, pilih database dari daftar Unmasked Databases dan pindahkan ke daftar Masked Databases. Centang kotak 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 lebih lanjut, lihat Data Masking Management. Sistem kemudian akan menerapkan masking pada database yang Anda tentukan.
-
-
FAQ
Data tidak disamarkan?
-
Gejala: Anda mengikuti langkah-langkah dalam contoh, tetapi hasil kueri tidak dimasking.
-
Penyebab yang mungkin:
-
Aturan ditetapkan untuk menonaktifkan masking bagi beberapa pengguna.
-
Label masking tidak dikonfigurasi.
-
-
Solusi:
-
Jalankan perintah SQL berikut untuk memeriksa adanya aturan unmasking khusus pengguna.
SELECT usename, label FROM pg_shseclabel s INNER JOIN pg_catalog.pg_user u on s.objoid = u.usesysid;Secara default, kueri ini mengembalikan hasil kosong, yang berarti data masking berlaku untuk semua pengguna. Jika hasilnya tidak kosong, Anda harus mengaktifkan masking untuk pengguna yang tercantum.
-
Jalankan pernyataan SQL berikut untuk memeriksa label masking yang telah dikonfigurasi.
SHOW hg_anon_labels;Jika hasilnya tidak mencakup label seperti
ip, jalankan perintah SQL berikut untuk menetapkannya.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 lebih lanjut tentang aturan yang sesuai dengan label-label ini, lihat Predefined label_name values.
-