Anda dapat mengaktifkan dynamic data masking di MaxCompute untuk menampilkan data sensitif kepada pengguna dengan informasi penting yang disembunyikan. Fitur ini secara langsung menyembunyikan atau mengganti data sensitif saat diakses, sehingga mencegah paparan data tersebut.
Pendahuluan
MaxCompute menyediakan dynamic data masking untuk melindungi data sensitif, seperti informasi identitas pribadi (PII), dalam skenario seperti pengembangan dan pengujian bisnis, berbagi data, serta O&M. Berbeda dengan kontrol akses berbasis izin tingkat kolom yang mengharuskan pengguna memodifikasi kueri mereka untuk mengecualikan kolom yang tidak dapat diakses, dynamic data masking bekerja secara otomatis tanpa perubahan pada kueri yang sudah ada. Saat pengguna mengakses data, sistem secara otomatis menerapkan kebijakan penyembunyian yang sesuai berdasarkan pengguna dan perannya. Hal ini memastikan bahwa data disembunyikan selama kueri, unduhan, join, dan komputasi user-defined function (UDF), sehingga mengurangi risiko paparan data sensitif.
Kebijakan penyembunyian mendukung berbagai metode, termasuk penyembunyian, penghashan, penggantian karakter, pembulatan, dan pemotongan tanggal, untuk berbagai jenis data seperti nomor identitas, nomor kartu bank, alamat, dan nomor telepon. MaxCompute menerapkan penyamaran data pada tahap paling awal pengambilan data dari penyimpanan, sehingga menjamin kinerja dan keamanan tinggi.

Cakupan
Wilayah yang didukung
Fitur ini berada dalam pratinjau publik dan hanya 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), AS (Silicon Valley), dan AS (Virginia).
Versi driver yang didukung
Metode koneksi
Versi driver
Dukungan penyembunyian
Java SDK
0.48.0-public atau yang lebih baru
Didukung
odpscmd
0.47.1 atau yang lebih baru
Didukung
JDBC
3.4.3 atau yang lebih baru
Didukung
MaxFrame
Semua versi
Didukung
PyODPS
Semua versi
Didukung
Go SDK
Semua versi
Didukung
Tabel internal dan eksternal
Kebijakan penyamaran data didukung untuk tabel internal dan eksternal MaxCompute.
Dynamic data masking dan izin tingkat baris bersifat saling eksklusif. Anda tidak dapat mengonfigurasi izin tingkat baris untuk tabel yang sudah memiliki kebijakan penyamaran, dan sebaliknya.
Saat menerapkan kebijakan penyamaran pada karakter Tionghoa, character encoding harus UTF-8.
Tampilan
Tampilan standar mendukung kebijakan penyamaran data. Kebijakan pada tampilan disinkronkan dengan kebijakan pada tabel sumber. Saat kebijakan penyamaran diterapkan atau dihapus dari tabel sumber, perubahan tersebut langsung berlaku pada tampilan.
Tampilan yang di-materialisasi mewarisi kebijakan penyamaran dari tabel sumbernya pada saat pembuatan. Perubahan selanjutnya pada kebijakan tabel sumber tidak memengaruhi tampilan yang di-materialisasi.
Kebijakan penyamaran
Jika beberapa kebijakan penyamaran berlaku untuk akses pengguna, kebijakan dengan prioritas tertinggi yang akan diterapkan. Untuk informasi lebih lanjut, lihat Prioritas kebijakan penyamaran yang telah ditentukan.
Cara kerja
Pemilik Proyek atau pengguna dengan peran Super_Administrator atau Admin dapat mengelola kebijakan penyamaran. Saat pengguna mengakses tabel yang berisi data sensitif, sistem memeriksa kebijakan penyamaran yang terkait dengan pengguna atau perannya dan mengembalikan data yang telah disembunyikan atau teks biasa sesuai ketentuan.

Perintah
Aktifkan atau nonaktifkan penyamaran data
Properti odps.data.masking.policy.enable adalah pengaturan tingkat Proyek yang mengontrol fitur dynamic data masking. Hanya Pemilik Proyek atau pengguna dengan peran Super_Administrator atau Admin tingkat Proyek yang dapat mengonfigurasi properti ini. Untuk informasi lebih lanjut, lihat Tetapkan peran manajemen bawaan kepada pengguna.
Setelah Anda mengaktifkan atau menonaktifkan penyamaran data, perubahan tersebut membutuhkan waktu sekitar 15 menit untuk berlaku karena latensi refresh cache.
Aktifkan dynamic data masking untuk Proyek.
setproject odps.data.masking.policy.enable=true;Nonaktifkan dynamic data masking untuk Proyek.
setproject odps.data.masking.policy.enable=false;
Buat dan hapus kebijakan penyamaran
Satu Proyek dapat memiliki hingga 1.000 kebijakan penyamaran.
Sintaks
Buat kebijakan penyamaran.
CREATE DATA MASKING POLICY [IF NOT EXISTS] <policy_name> TO { USER <user_list> | ROLE <role_list> | default } USING <Predefined Masking Policy>;Hapus kebijakan penyamaran.
DROP DATA MASKING POLICY <policy_name>;
Parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyamaran. Nama kebijakan tidak peka huruf besar/kecil dan hanya boleh berisi huruf, angka, dan garis bawah (_). Nama harus dimulai dengan huruf dan panjang maksimal 128 byte.
USER | ROLE | default
Ya
Cakupan kebijakan. Anda harus memilih salah satu opsi berikut:
USER: Menerapkan kebijakan ke satu atau beberapa pengguna. Untuk
<user_list>, tentukan username target. Anda dapat menjalankan perintah list users; di MaxCompute untuk melihat informasi pengguna.ROLE: Menerapkan kebijakan ke satu atau beberapa peran. Untuk
<role_list>, tentukan nama peran target. Anda dapat menjalankan perintah list roles; di MaxCompute untuk melihat informasi peran.default: Menerapkan kebijakan default. Jika tidak ada kebijakan penyamaran spesifik yang cocok dengan pengguna atau peran saat mengakses kolom sensitif, kebijakan default akan diterapkan.
Predefined Masking Policy
Ya
Kebijakan penyamaran yang telah ditentukan. Untuk informasi lebih lanjut, lihat Kebijakan penyamaran yang telah ditentukan.
Contoh
Contoh 1: Buat kebijakan penghashan 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 penghashan MD5 untuk peran pengembangan dan penerapan proyek.
CREATE data masking policy IF NOT EXISTS masking_test_001 TO ROLE (role_project_deploy, role_project_dev) USING MASKED_MD5(0);
Terapkan kebijakan penyamaran
Sintaks
--Terapkan kebijakan penyamaran ke kolom tabel. APPLY DATA MASKING POLICY <policy_name> BIND TO TABLE <table_name> COLUMN <column_name>; --Lepaskan kebijakan penyamaran dari kolom tabel. APPLY DATA MASKING POLICY <policy_name> UNBIND FROM TABLE <table_name> COLUMN <column_name>; --Lepaskan semua kebijakan penyamaran dari kolom tabel. APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name> COLUMN <column_name>; --Lepaskan semua kebijakan penyamaran dari tabel. APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name>;Parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyamaran.
table_name
Ya
Nama tabel yang berisi data sensitif.
column_name
Ya
Nama kolom yang berisi data sensitif.
Lihat kebijakan penyamaran
Sintaks
--Lihat detail kebijakan penyamaran. DESC DATA MASKING POLICY <policy_name>; --Lihat informasi tabel lengkap, termasuk kebijakan penyamaran yang diterapkan. DESC EXTENDED <table_name>; --Tampilkan nama semua kebijakan penyamaran di Proyek saat ini. LIST DATA MASKING POLICY; --Tampilkan nama kebijakan penyamaran yang terikat ke pengguna tertentu. LIST DATA MASKING POLICY TO USER <user_name>; --Tampilkan nama kebijakan penyamaran yang terikat ke peran tertentu. LIST DATA MASKING POLICY TO ROLE <role_name>; --Tampilkan nama semua kebijakan penyamaran yang terikat ke tabel tertentu. LIST DATA MASKING POLICY ON <table_name>; --Tampilkan nama semua kebijakan penyamaran yang terikat ke kolom tertentu dari tabel. LIST DATA MASKING POLICY ON <table_name> TO COLUMN <column_name>;Parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyamaran.
table_name
Ya
Nama tabel yang berisi data sensitif.
column_name
Ya
Nama kolom yang berisi data sensitif.
user_name
Ya
Username.
role_name
Ya
Nama peran.
Kebijakan penyamaran yang telah ditentukan
Kebijakan penyamaran yang telah ditentukan mencakup metode seperti penyamaran, penghashan, penggantian karakter, dan pembulatan. Anda dapat memilih kebijakan yang sesuai berdasarkan tipe data dan kebutuhan perlindungan Anda.
Kategori | Kebijakan | Sintaks | Deskripsi |
Umum | Tanpa penyamaran | UNMASKED | Mengembalikan data dalam teks biasa. Tipe data yang didukung: Semua. |
Nullify | MASKED_NULLIFY | Mengganti data dengan NULL.
| |
Nilai default | MASKED_DV | Mengganti nilai dengan nilai default dari tipe data yang sesuai. Untuk informasi lebih lanjut, lihat Nilai default untuk kebijakan penyamaran MASKED_DV.
| |
Pemotongan tanggal | MASKED_DATE_YEAR | Hanya menyimpan bagian tahun dari nilai waktu dan mengatur ulang bulan, hari, serta waktu ke awal tahun tersebut (1 Januari, 00:00:00 UTC).
| |
Pembulatan | MASKED_POINT_RESERVE(<num>) | Membulatkan nilai ke jumlah tempat desimal tertentu.
| |
Penyamaran | Mask start and end | MASKED_STRING_MASKED_BA(<before>, <after>) | Mengganti awal dan akhir string dengan tanda bintang (
|
Mask middle | MASKED_STRING_UNMASKED_BA(<before>, <after>) | Menampilkan awal dan akhir string dalam teks biasa dan menyembunyikan bagian tengah dengan tanda bintang (
| |
Hashing | SHA256 hashing | MASKED_SHA256(<salt>) | Menyembunyikan data menggunakan algoritma penghashan SHA256.
|
SHA512 hashing | MASKED_SHA512(<salt>) | Menyembunyikan data menggunakan algoritma penghashan SHA512.
| |
MD5 hashing | MASKED_MD5(<salt>) | Menyembunyikan data menggunakan algoritma penghashan MD5.
| |
SM3 hashing | MASKED_SM3(<salt>) | Menyembunyikan data menggunakan algoritma penghashan SM3.
| |
Penggantian karakter | Random replacement | MASKED_REPLACE_RANDOM(<position>) | Mengganti data dengan karakter acak yang terdiri dari angka dan huruf. Panjang string tetap tidak berubah.
|
Random replacement at start and end | MASKED_REPLACE_RANDOM_BA(<before>, <after>) | Mengganti awal dan akhir string dengan karakter alfanumerik acak. Panjang string tetap tidak berubah.
| |
Fixed replacement | MASKED_REPLACE_FIXED(<position>, <fixed_string>) |
|
Contoh penggunaan
Menyembunyikan informasi pribadi sensitif
Contoh ini menunjukkan cara mengonfigurasi kebijakan penyamaran untuk menyembunyikan informasi pribadi sensitif.
Persiapkan data.
Buat tabel untuk menyimpan 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 '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);Konfigurasi kebijakan penyamaran.
Untuk nama, simpan hanya karakter pertama dan ganti sisanya dengan tanda bintang (
*).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 ketinggian ke bilangan bulat terdekat.
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;Untuk tanggal lahir, atur ulang nilainya ke awal tahun.
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;Untuk pengguna default, hash nomor telepon menggunakan algoritma SM3.
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 telah dikonfigurasi kebijakan penyamarannya untuk mengkueri data.
SELECT id, name, height, birthday, phone_number FROM personal_info; -- Sebelum penyamaran +----+-----------+--------+------------+--------------+ | 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 penyamaran +----+---------+--------+------------+----------------------------------------------+ | id | name | height | birthday | phone_number | +----+---------+--------+------------+----------------------------------------------+ | 1 | Z******** | 179 | 1990-01-01 | lvYJaH4ElL2ilpQx/8tfMUw7xP22yblIgmfWp0/msUQ= | | 2 | L**** | 163 | 1992-01-01 | 9fFWacNSwCRZLAjMHqunlfwkqhTbP2ubuDOeOSh4N1c= | | 3 | W****** | 185 | 1994-01-01 | k/0JoQCSarJg9ATJ5tyVnhQf1jIBxHXRbB+cvUm4OmE= | +----+---------+--------+------------+----------------------------------------------+
Penyamaran default untuk semua pengguna dan peran
Contoh ini menunjukkan cara prioritas kebijakan bekerja saat pengguna atau peran cocok dengan beberapa kebijakan penyamaran.
Terapkan kebijakan MASKED_SHA256(5) untuk pengguna default.
CREATE DATA MASKING POLICY default_hash_policy
TO DEFAULT
USING MASKED_SHA256(5);Terapkan kebijakan UNMASKED untuk pengguna spesifik 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 di-hash dengan SHA256.
Pengguna A dan B cocok dengan kedua kebijakan MASKED_SHA256(5) dan UNMASKED. Sistem menerapkan UNMASKED karena memiliki prioritas lebih tinggi. Untuk informasi lebih lanjut, lihat Prioritas kebijakan penyamaran yang telah ditentukan. Pengguna lain hanya cocok dengan kebijakan MASKED_SHA256(5).
Lampiran
Prioritas kebijakan penyamaran yang telah ditentukan
Saat beberapa kebijakan penyamaran berlaku untuk akses data pengguna, kebijakan dengan prioritas tertinggi yang digunakan.
Misalnya, pengguna bernama A mengakses kolom col_string, dan permintaannya cocok dengan dua kebijakan penyamaran: MASKED_REPLACE_RANDOM(3) dengan tingkat prioritas 3 dan MASKED_SM3 dengan tingkat prioritas 4. Karena angka yang lebih kecil menunjukkan prioritas lebih tinggi, kebijakan MASKED_REPLACE_RANDOM(3) yang diterapkan. Pengguna A melihat data yang disembunyikan dengan karakter acak.
Prioritas | Kebijakan penyamaran yang telah ditentukan |
0 (tertinggi) | 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, fixed_string) | |
4 | MASKED_SHA256 |
MASKED_SHA512 | |
MASKED_MD5 | |
MASKED_SM3 | |
5 | MASKED_DV |
6 (terendah) | MASKED_NULLIFY |
Nilai default untuk kebijakan penyamaran MASKED_DV
Tipe | Default |
bigint | 0 |
double | 0.0 |
decimal | 0 |
string | "" (string kosong) |
datetime | DATETIME'1970-01-01 00:00:00' (UTC) |
boolean | false |
tinyint | 0 |
smallint | 0 |
int | 0 |
binary | '' (kosong) |
float | 0.0 |
varchar(n) | "" (string kosong) |
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 | Array kosong |
map | Map kosong |
json | "" (string kosong) |
struct | Struct dengan nilai default untuk setiap bidang |