Untuk memungkinkan pengguna tertentu hanya melihat data sensitif yang telah disembunyikan dalam Proyek MaxCompute, Anda dapat mengaktifkan fitur dynamic data masking. Fitur ini mencegah kebocoran data sensitif dengan menyembunyikan atau mengganti data sensitif secara real time saat data diakses atau ditampilkan. Topik ini menggunakan contoh untuk menjelaskan cara mengaktifkan dynamic data masking di MaxCompute.
Deskripsi Fitur
MaxCompute menyediakan fitur dynamic data masking untuk melindungi data sensitif, seperti personally identifiable information (PII), dengan menyembunyikan data saat ditampilkan. Fitur ini berlaku dalam skenario seperti pengujian pengembangan bisnis, berbagi data, serta operasi dan maintenance (O&M). Dynamic data masking berbeda dari izin tingkat kolom Access Control List (ACL). Saat menggunakan izin tingkat kolom ACL, pengguna harus memodifikasi kueri SQL mereka untuk mengecualikan kolom yang tidak memiliki izin akses. Sebaliknya, kebijakan penyembunyian data tidak mengharuskan pengguna mengubah kueri SQL yang sudah ada. Saat pengguna mengakses data, sistem secara otomatis menyembunyikan data pada kolom terkait berdasarkan identitas dan role pengguna. Hal ini memastikan bahwa data tetap disembunyikan selama kueri, unduhan, asosiasi, dan komputasi user-defined function (UDF), sehingga mencegah kebocoran data sensitif.
Kebijakan penyembunyian data mendukung berbagai metode, seperti penyembunyian, penghashan, penggantian karakter, pembulatan numerik, dan pembulatan tanggal, untuk memenuhi berbagai kebutuhan penyembunyian informasi identitas, nomor kartu bank, alamat, dan nomor telepon. MaxCompute menerapkan penyembunyian data pada titik paling dekat dengan pengambilan data dari penyimpanan, yang menjamin performa tinggi dan keamanan yang kuat.

Lingkup
Wilayah yang Didukung
Fitur ini berada dalam pratinjau publik dan tersedia di wilayah berikut: Tiongkok (Hangzhou), Tiongkok (Shanghai), Tiongkok (Beijing), Tiongkok (Zhangjiakou), Tiongkok (Ulanqab), Tiongkok (Shenzhen), Tiongkok (Chengdu), Tiongkok (Hong Kong), Jepang (Tokyo), Singapura, Malaysia (Kuala Lumpur), Indonesia (Jakarta), Jerman (Frankfurt), dan AS (Silicon Valley).
Versi driver yang didukung
Metode koneksi MaxCompute
Versi driver
Dukungan untuk penyembunyian data
Java SDK
0.48.0-public dan lebih baru
Dukungan
odpscmd
0.47.1 dan lebih baru
Didukung
JDBC
3.4.3 dan lebih baru
Dukungan
MaxFrame
Tanpa Batas
Didukung
PyODPS
Tanpa Batas
Didukung
Go SDK
Tanpa Batas
Dukungan
Tabel internal
MaxCompute mendukung kebijakan penyembunyian data untuk tabel internal, tetapi tidak untuk tabel eksternal.
Fitur dynamic data masking dan fitur izin tingkat baris saling eksklusif. Anda tidak dapat mengonfigurasi kebijakan penyembunyian data dan kebijakan izin tingkat baris secara bersamaan untuk tabel yang sama.
Jika Anda menggunakan kebijakan penyembunyian untuk menyembunyikan karakter Tionghoa, character encoding harus UTF-8.
Tampilan
Tampilan tradisional mendukung kebijakan penyembunyian data. Kebijakan penyembunyian data untuk tampilan tradisional disinkronkan dengan kebijakan pada tabel sumber. Jika Anda menyambungkan atau melepas kebijakan penyembunyian data dari tabel sumber, perubahan tersebut juga berlaku pada tampilan tradisional.
Saat Anda membuat materialized view, kebijakan penyembunyian data dari tabel sumber diterapkan pada materialized view tersebut. Jika Anda menyambungkan kebijakan penyembunyian baru atau melepas kebijakan penyembunyian yang ada dari tabel sumber setelah materialized view dibuat, kebijakan penyembunyian pada materialized view tetap tidak berubah.
Kebijakan penyembunyian data
Saat pengguna mengakses data sensitif, jika beberapa kebijakan penyembunyian data berlaku secara bersamaan, sistem akan menyembunyikan data sensitif berdasarkan kebijakan dengan prioritas tertinggi. Untuk informasi lebih lanjut, lihat Prioritas kebijakan penyembunyian data bawaan.
Alur penyembunyian data
Pemilik Proyek dan pengguna yang ditetapkan sebagai role Super_Administrator atau Admin dapat mengelola kebijakan penyembunyian data. Saat pengguna mengakses tabel yang berisi data sensitif, sistem memeriksa kebijakan penyembunyian yang terkait dengan pengguna atau role tersebut dan mengembalikan data yang telah disembunyikan atau teks biasa.

Perintah penyembunyian data
Aktifkan atau nonaktifkan fitur penyembunyian data untuk sebuah proyek
odps.data.masking.policy.enable adalah properti tingkat proyek yang digunakan untuk mengaktifkan atau menonaktifkan fitur penyembunyian data. Hanya pemilik proyek atau pengguna yang ditetapkan sebagai role Super_Administrator atau Admin tingkat proyek yang dapat mengaktifkan atau menonaktifkan fitur ini. Untuk informasi lebih lanjut, lihat Tetapkan role manajemen bawaan kepada pengguna.
Aktifkan fitur penyembunyian data untuk sebuah proyek.
setproject odps.data.masking.policy.enable=true;Nonaktifkan fitur penyembunyian data untuk sebuah proyek.
setproject odps.data.masking.policy.enable=false;
Buat dan hapus kebijakan penyembunyian data
Format perintah
Buat kebijakan penyembunyian data.
CREATE DATA MASKING POLICY [IF NOT EXISTS] <policy_name> TO { USER <user_list> | ROLE <role_list> | default } USING <Predefined Masking Policy>;Hapus kebijakan penyembunyian data.
DROP DATA MASKING POLICY <policy_name>;
Deskripsi parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyembunyian data. Nama kebijakan tidak peka huruf besar/kecil dan tidak boleh mengandung karakter khusus. Nama hanya boleh terdiri dari huruf, angka, dan garis bawah (_). Disarankan agar nama dimulai dengan huruf. Panjang nama tidak boleh melebihi 128 byte.
USER | ROLE | default
Ya
Pilih salah satu dari tiga parameter berikut.
USER: Menyembunyikan data untuk pengguna tertentu. Untuk <user_list>, tentukan nama pengguna. Anda dapat menjalankan perintah
list users;di MaxCompute untuk mendapatkan informasi role.ROLE: Menyembunyikan data untuk role tertentu. Untuk <role_list>, tentukan nama role. Anda dapat menjalankan perintah
list roles;di MaxCompute untuk mendapatkan informasi role.default: Kebijakan penyembunyian data default. Saat pengguna atau role mengakses kolom sensitif dan tidak ada kebijakan penyembunyian data yang cocok, kebijakan default digunakan untuk menyembunyikan data pada kolom sensitif tersebut.
Predefined Masking Policy
Ya
Kebijakan penyembunyian data yang telah ditentukan sebelumnya. Untuk informasi lebih lanjut, lihat Kebijakan penyembunyian data yang telah ditentukan sebelumnya.
Contoh
Contoh 1: Buat kebijakan penyembunyian hash MD5 untuk pengguna userA, userB, dan userC.
CREATE data masking policy IF NOT EXISTS masking_test_001 TO USER (userA, userB, userC) USING MASKED_MD5(0);Contoh 2: Buat kebijakan penyembunyian hashing MD5 untuk role developer proyek dan O&M.
CREATE data masking policy IF NOT EXISTS masking_test_001 TO ROLE (role_project_deploy, role_project_dev) USING MASKED_MD5(0);
Terapkan kebijakan penyembunyian data ke kolom data sensitif
Format perintah
--Terapkan kebijakan penyembunyian data ke kolom data sensitif suatu tabel. APPLY DATA MASKING POLICY <policy_name> BIND TO TABLE <table_name> COLUMN <column_name>; --Batalkan kebijakan penyembunyian data tertentu untuk kolom data sensitif suatu tabel. APPLY DATA MASKING POLICY <policy_name> UNBIND FROM TABLE <table_name> COLUMN <column_name>; --Batalkan semua kebijakan penyembunyian data untuk kolom data sensitif suatu tabel. APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name> COLUMN <column_name>; --Batalkan semua kebijakan penyembunyian data untuk semua kolom data sensitif suatu tabel. APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name>;Deskripsi parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyembunyian data.
table_name
Ya
Nama tabel yang berisi data sensitif.
column_name
Ya
Nama kolom yang berisi data sensitif.
Lihat kebijakan penyembunyian data
Format perintah
--Lihat informasi pembuatan kebijakan penyembunyian data. DESC DATA MASKING POLICY <policy_name>; --Lihat informasi tambahan tentang tabel, termasuk informasi kolom data sensitif dan kebijakan penyembunyian data yang diterapkan. DESC EXTENDED <table_name>; --Tampilkan nama semua kebijakan penyembunyian data di proyek saat ini. LIST DATA MASKING POLICY; --Tampilkan nama kebijakan penyembunyian data yang dilampirkan ke pengguna tertentu. LIST DATA MASKING POLICY TO USER <user_name>; --Tampilkan nama kebijakan penyembunyian data yang dilampirkan ke role tertentu. LIST DATA MASKING POLICY TO ROLE <role_name>; --Tampilkan nama semua kebijakan penyembunyian data yang dilampirkan ke tabel tertentu. LIST DATA MASKING POLICY ON <table_name>; --Tampilkan nama semua kebijakan penyembunyian data yang dilampirkan ke kolom tertentu dari tabel tertentu. LIST DATA MASKING POLICY ON <table_name> TO COLUMN <column_name>;Deskripsi parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyembunyian data.
table_name
Ya
Nama tabel yang berisi data sensitif.
column_name
Ya
Nama kolom yang berisi data sensitif.
user_name
Ya
Nama pengguna.
role_name
Ya
Nama peran.
Kebijakan penyembunyian data yang telah ditentukan sebelumnya
Kebijakan penyembunyian data bawaan mencakup penyembunyian, penghashan, penggantian karakter, dan pembulatan. Untuk melindungi data, Anda dapat memilih kebijakan penyembunyian data bawaan berdasarkan tipe data dari data sensitif tersebut.
Jenis Kebijakan | Nama Kebijakan | Format perintah | Deskripsi |
Umum | Tidak disembunyikan | UNMASKED | Tidak menyembunyikan data. Tipe yang didukung: semua tipe. |
Atur ke null | MASKED_NULLIFY | Mengatur nilai menjadi NULL. Setelah penyembunyian data, nilai NULL dikembalikan.
| |
Tetapkan nilai default | MASKED_DV | Menggunakan nilai default untuk menyembunyikan data. Untuk informasi lebih lanjut tentang nilai default untuk setiap tipe data, lihat Nilai default tipe data untuk kebijakan MASKED_DV.
| |
Hanya pertahankan tahun | MASKED_DATE_YEAR | Hanya mempertahankan bagian tahun dari nilai waktu. Bagian selain tahun diatur menjadi 1 Januari, pukul 00:00 (UTC).
| |
Pembulatan | MASKED_POINT_RESERVE(<num>) | Membulatkan nilai dan mempertahankan 0 hingga 5 tempat desimal.
| |
Penyembunyian | Menyembunyikan awal dan akhir string | MASKED_STRING_MASKED_BA(<before>, <after>) | Menyembunyikan bagian awal dan akhir string dengan
|
Menyembunyikan bagian tengah string | MASKED_STRING_UNMASKED_BA(<before>, <after>) | Menampilkan bagian awal dan akhir string dalam teks biasa dan mengganti karakter di bagian tengah dengan tanda bintang (
| |
Hash | Penghashan SHA256 | MASKED_SHA256(<salt>) | Menyembunyikan data menggunakan algoritma hash SHA256.
|
Penghashan SHA512 | MASKED_SHA512(<salt>) | Menyembunyikan data menggunakan algoritma hash SHA512.
| |
Penghashan MD5 | MASKED_MD5(<salt>) | Menyembunyikan data menggunakan algoritma hash MD5.
| |
Penghashan SM3 | MASKED_SM3(<salt>) | Menyembunyikan data menggunakan algoritma hash SM3.
| |
Penggantian karakter | Penggantian karakter acak | MASKED_REPLACE_RANDOM(<position>) | Mengganti data dengan karakter acak. Panjang string tidak berubah setelah penggantian. Nilai acak mencakup angka dan huruf.
|
Penggantian karakter acak di awal dan akhir | MASKED_REPLACE_RANDOM_BA(<before>, <after>) | Mengganti awal dan akhir data dengan karakter acak. Panjang string tidak berubah setelah penggantian. Nilai acak mencakup angka dan huruf.
| |
Penggantian karakter tetap | MASKED_REPLACE_FIXED(<position>, <fixed_string>) |
|
Contoh
Menyembunyikan informasi pribadi sensitif
Contoh ini menunjukkan cara mengonfigurasi kebijakan penyembunyian data untuk menyembunyikan informasi pribadi sensitif.
Siapkan data.
Buat tabel untuk informasi pribadi dan masukkan data sensitif.
-- Buat tabel untuk informasi sensitif. CREATE TABLE if NOT EXISTS personal_info ( id bigint COMMENT 'ID unik pengguna.', name string COMMENT 'Nama pengguna.', age int COMMENT 'Usia pengguna.', gender string COMMENT 'Jenis kelamin pengguna.', height float COMMENT 'Tinggi badan pengguna.', birthday date COMMENT 'Tanggal lahir pengguna.', phone_number string COMMENT 'Nomor telepon pengguna.', email string COMMENT 'Alamat email pengguna.', address string COMMENT 'Alamat pengguna.', salary decimal(18, 2) COMMENT 'Gaji pengguna.', create_time timestamp COMMENT 'Waktu saat informasi pengguna dibuat.', update_time timestamp COMMENT 'Waktu saat informasi pengguna diperbarui.', is_deleted boolean COMMENT 'Flag yang menunjukkan apakah informasi pengguna dihapus.' ); -- Masukkan data sensitif. INSERT INTO personal_info VALUES (1, 'Zhang San', 18, 'Male', 178.56, '1990-01-01', '13800000000', 'zhangsan@example.com', 'Haidian District, Beijing', 5000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00', false), (2, 'Li Si', 20, 'Female', 162.70, '1992-02-02', '13900000000', 'lisi@example.com', 'Pudong New Area, Shanghai', 6000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00',false), (3, 'Wang Wu', 22, 'Male', 185.21, '1994-03-03', '14000000000', 'wangwu@example.com', 'Nanshan District, Shenzhen', 7000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00', false);Konfigurasikan kebijakan penyembunyian data.
Pertahankan hanya karakter pertama dari nama, dan ganti karakter lainnya dengan
*.CREATE data masking policy IF NOT EXISTS masking_name TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_STRING_UNMASKED_BA(1, 0); apply data masking policy masking_name bind TO TABLE personal_info COLUMN name;Bulatkan nilai pada bidang height.
CREATE data masking policy IF NOT EXISTS masking_height TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_POINT_RESERVE(0); apply data masking policy masking_height bind TO TABLE personal_info COLUMN height;Hanya pertahankan tahun dari tanggal lahir.
CREATE data masking policy IF NOT EXISTS masking_birthday TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_DATE_YEAR; apply data masking policy masking_birthday bind TO TABLE personal_info COLUMN birthday;Gunakan algoritma SM3 untuk meng-hash nomor telepon bagi pengguna default.
CREATE DATA MASKING POLICY default_sm3 TO DEFAULT USING MASKED_SM3(0); apply data masking policy default_sm3 bind TO TABLE personal_info COLUMN phone_number;
Gunakan akun yang tunduk pada kebijakan penyembunyian data untuk mengkueri data yang telah disembunyikan.
SELECT id, name, height, birthday, phone_number FROM personal_info; -- Sebelum penyembunyian +------------+------+--------+----------+--------------+ | id | name | height | birthday | phone_number | +------------+------+--------+----------+--------------+ | 1 | Zhang San | 178.56 | 1990-01-01 | 13800000000 | | 2 | Li Si | 162.7 | 1992-02-02 | 13900000000 | | 3 | Wang Wu | 185.21 | 1994-03-03 | 14000000000 | +------------+------+--------+----------+--------------+ -- Setelah penyembunyian +------------+------------+------------+------------+--------------+ | id | name | height | birthday | phone_number | +------------+------------+------------+------------+--------------+ | 1 | Zhang* | 179.0 | 1990-01-01 | lvYJaH4ElL2ilpQx/8tfMUw7xP22yblIgmfWp0/msUQ= | | 2 | Li* | 163.0 | 1992-01-01 | 9fFWacNSwCRZLAjMHqunlfwkqhTbP2ubuDOeOSh4N1c= | | 3 | Wang* | 185.0 | 1994-01-01 | k/0JoQCSarJg9ATJ5tyVnhQf1jIBxHXRbB+cvUm4OmE= | +------------+------------+------------+------------+--------------+
Menyembunyikan data untuk semua pengguna dan peran secara default
Contoh berikut menunjukkan bahwa ketika pengguna atau role cocok dengan beberapa kebijakan penyembunyian data, kebijakan dengan prioritas tertinggi yang berlaku.
Gunakan kebijakan penyembunyian MASKED_SHA256(5) untuk pengguna default.
CREATE DATA MASKING POLICY default_hash_policy
TO DEFAULT
USING MASKED_SHA256(5);Gunakan kebijakan UNMASKED untuk pengguna khusus A dan B.
CREATE DATA MASKING POLICY ab_unmask_policy
TO USER (A, B)
USING UNMASKED;Hasil: Pengguna A dan B dapat mengakses data teks biasa. Pengguna lain hanya dapat mengakses data yang telah disembunyikan menggunakan algoritma hash SHA256.
Pengguna A dan B cocok dengan kedua kebijakan MASKED_SHA256(5) dan UNMASKED. Kebijakan UNMASKED yang berlaku karena memiliki prioritas lebih tinggi (untuk informasi lebih lanjut, lihat Prioritas kebijakan penyembunyian bawaan). Pengguna lain cocok dengan kebijakan MASKED_SHA256(5).
Lampiran
Prioritas kebijakan penyembunyian yang telah ditentukan sebelumnya
Saat pengguna mengakses data sensitif, jika beberapa kebijakan penyembunyian data berlaku, kebijakan dengan prioritas lebih tinggi yang dieksekusi.
Misalnya, jika Pengguna A mengakses kolom col_string dan cocok dengan dua kebijakan penyembunyian data, yaitu MASKED_REPLACE_RANDOM(3) dengan prioritas 3 dan MASKED_SM3 dengan prioritas 4, sistem akan mengeksekusi kebijakan dengan prioritas lebih tinggi. Dalam kasus ini, MASKED_REPLACE_RANDOM(3) digunakan, dan Pengguna A melihat data dengan karakter acak yang telah diganti.
Prioritas | Kebijakan penyembunyian data bawaan |
0 (Tinggi) | UNMASKED |
1 | MASKED_POINT_RESERVE(num) |
2 | MASKED_DATE_YEAR |
3 | MASKED_STRING_MASKED_BA(before, after) |
MASKED_STRING_UNMASKED_BA(before, after) | |
MASKED_REPLACE_RANDOM(position) | |
MASKED_REPLACE_RANDOM_BA(before, after) | |
MASKED_REPLACE_FIXED(position) | |
4 | MASKED_SHA256 |
MASKED_SHA512 | |
MASKED_MD5 | |
MASKED_SM3 | |
5 | MASKED_DV |
6 (Rendah) | MASKED_NULLIFY |
Nilai default untuk kebijakan penyembunyian data MASKED_DV
Tipe data | Nilai default |
bigint | 0 |
double | 0.0 |
decimal | 0 |
string | "" |
datetime | DATETIME'1970-01-01 00:00:00' (UTC) |
boolean | false |
tinyint | 0 |
smallint | 0 |
int | 0 |
binary | '' |
float | 0.0 |
double | 0.0 |
decimal | 0 |
varchar(n) | "" |
char(n) | " " (n spasi) |
date | DATE'1970-01-01' |
timestamp | TIMESTAMP'1970-01-01 00:00:00' (UTC) |
timestamp_ntz | TIMESTAMP'1970-01-01 00:00:00' (UTC) |
array | {Nilai default kelas anak} |
map | {key:value} (key dan value sesuai dengan nilai default kelas anak) |
json | "" |
struct | (Nilai default kelas anak) |