Untuk memungkinkan pengguna tertentu melihat data sensitif dalam Proyek MaxCompute sekaligus menyembunyikan informasi penting, aktifkan fitur penyembunyian data dinamis. Fitur ini menyembunyikan atau mengganti data sensitif secara real time saat diakses guna mencegah kebocoran data. Topik ini menjelaskan cara mengaktifkan fitur penyembunyian data dinamis di MaxCompute dan menyediakan contoh penggunaannya.
Pengantar
MaxCompute menyediakan penyembunyian data dinamis untuk melindungi data sensitif, seperti informasi identitas pribadi (PII), dalam skenario seperti pengembangan, pengujian, berbagi data, dan operasi. Berbeda dengan daftar kontrol akses (ACL) tingkat kolom yang mengharuskan pengguna memodifikasi kueri mereka agar mengecualikan kolom yang tidak dapat diakses, penyembunyian data dinamis bekerja secara otomatis tanpa perlu mengubah kueri yang ada. Saat pengguna mengakses data, sistem secara otomatis menerapkan kebijakan penyembunyian yang sesuai berdasarkan pengguna atau rolenya. Hal ini memastikan bahwa data disembunyikan selama kueri, unduhan, join, dan komputasi user-defined function (UDF), serta mengurangi risiko eksposur data sensitif.
Kebijakan penyembunyian mendukung berbagai metode, termasuk penyembunyian, penghashan, penggantian karakter, pembulatan numerik, dan pemotongan tanggal, untuk melindungi data seperti nomor identitas, nomor kartu bank, alamat, dan nomor telepon. MaxCompute menerapkan penyembunyian data pada tahap paling awal proses pengambilan data dari penyimpanan, sehingga menjamin performa dan keamanan tinggi.

Catatan penggunaan
Wilayah yang didukung
Fitur ini sedang 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 minimum
Dukungan penyembunyian
Java SDK
0.48.0-public atau lebih baru
Didukung
odpscmd
0.47.1 atau lebih baru
Didukung
JDBC
3.4.3 atau lebih baru
Didukung
MaxFrame
Semua versi
Didukung
PyODPS
Semua versi
Didukung
Go SDK
Semua versi
Didukung
Tabel internal dan eksternal
Kebijakan penyembunyian didukung untuk tabel internal maupun eksternal MaxCompute.
Penyembunyian data dinamis dan izin tingkat baris saling eksklusif. Anda tidak dapat mengonfigurasi izin tingkat baris untuk tabel yang sudah memiliki kebijakan penyembunyian, dan sebaliknya.
Saat menerapkan kebijakan penyembunyian pada karakter Tionghoa, character encoding harus UTF-8.
Tampilan
Tampilan standar mendukung kebijakan penyembunyian. Kebijakan pada tampilan disinkronkan dengan kebijakan pada tabel sumber. Ketika kebijakan penyembunyian di-bind atau di-unbind dari tabel sumber, perubahan tersebut langsung berlaku pada tampilan.
Tampilan yang di-materialisasi mewarisi kebijakan penyembunyian dari tabel sumbernya pada saat pembuatan. Perubahan selanjutnya pada kebijakan tabel sumber tidak memengaruhi tampilan yang di-materialisasi.
Kebijakan penyembunyian
Jika beberapa kebijakan penyembunyian berlaku untuk satu pengguna, kebijakan dengan prioritas tertinggi yang akan digunakan. Untuk informasi lebih lanjut, lihat Prioritas kebijakan.
Cara kerja
Pemilik proyek atau pengguna dengan role Super_Administrator atau Admin dapat mengelola kebijakan penyembunyian. Saat pengguna mengakses tabel yang berisi data sensitif, sistem memeriksa kebijakan penyembunyian yang terkait dengan pengguna atau rolenya dan mengembalikan data yang telah disembunyikan atau teks biasa sesuai ketentuan.

Izin penyembunyian
Hanya pemilik proyek atau pengguna yang diberikan role Super_Administrator atau Admin tingkat proyek yang dapat mengaktifkan atau menonaktifkan fitur penyembunyian data dinamis untuk suatu proyek.
Izin yang diperlukan untuk mengelola kebijakan penyembunyian untuk suatu tabel adalah sebagai berikut:
Secara default, pemilik proyek atau pengguna dengan role Super_Administrator atau Admin tingkat proyek memiliki izin yang diperlukan.
Anda juga dapat memberikan izin kepada RAM User atau RAM Role menggunakan role administratif tingkat proyek kustom. Masuk ke Konsol MaxCompute. Di panel navigasi sebelah kiri, pilih . Di halaman manajemen proyek Anda, buka halaman Project Settings dan pilih tab Role Permissions. Klik Create Project-level Role untuk membuat role proyek dengan izin MaxCompute. Atur **Role Type** menjadi **Admin (management role)** dan gunakan pernyataan kebijakan seperti contoh berikut:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "odps:CreateDataMaskingPolicy","odps:ListDataMaskingPolicies"], "Resource": [ "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies" ] }, { "Effect": "Allow", "Action": [ "odps:DropDataMaskingPolicy", "odps:DescribeDataMaskingPolicy" ], "Resource": [ "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies/*" ] }, { "Effect": "Allow", "Action": "odps:ApplyDataMaskingPolicy", "Resource": [ "acs:odps:*:projects/[project_name]/authorization/tables/*", "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies/*" ] } ] }
Perintah
Aktifkan atau nonaktifkan penyembunyian data
Sakelar penyembunyian data odps.data.masking.policy.enable merupakan properti tingkat proyek. Hanya pemilik proyek atau pengguna yang diberikan role Super_Administrator atau Admin tingkat proyek yang dapat mengonfigurasi properti ini. Untuk informasi lebih lanjut, lihat Kelola role bawaan.
Setelah Anda mengaktifkan atau menonaktifkan penyembunyian data, perubahan tersebut membutuhkan waktu sekitar 15 menit untuk berlaku karena latensi refresh cache.
Aktifkan penyembunyian data dinamis untuk proyek.
setproject odps.data.masking.policy.enable=true;Nonaktifkan penyembunyian data dinamis untuk proyek.
setproject odps.data.masking.policy.enable=false;
Buat dan hapus kebijakan penyembunyian
Satu proyek dapat memiliki maksimal 1.000 kebijakan penyembunyian.
Sintaks
Buat kebijakan penyembunyian.
CREATE DATA MASKING POLICY [IF NOT EXISTS] <policy_name> TO { USER <user_list> | ROLE <role_list> | default } USING <Predefined Masking Policy>;Hapus kebijakan penyembunyian.
DROP DATA MASKING POLICY <policy_name>;
Parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyembunyian. Nama kebijakan tidak peka huruf besar/kecil dan hanya boleh terdiri dari huruf (a–z, A–Z), angka (0–9), dan garis bawah (_). Disarankan untuk memulai nama dengan huruf. Panjang nama maksimal 128 byte.
USER | ROLE | default
Ya
Pilih salah satu opsi berikut:
USER: Menerapkan kebijakan untuk pengguna tertentu. Di
<user_list>, tentukan nama penggunanya. Anda dapat menjalankan perintahlist users;untuk melihat informasi pengguna.ROLE: Menerapkan kebijakan untuk role tertentu. Di
<role_list>, tentukan nama rolenya. Anda dapat menjalankan perintahlist roles;untuk melihat informasi role.default: Menerapkan kebijakan secara default. Jika tidak ada kebijakan penyembunyian lain yang cocok dengan pengguna atau role, kebijakan default akan diterapkan.
Predefined Masking Policy
Ya
Kebijakan penyembunyian yang telah ditentukan sebelumnya. Untuk informasi lebih lanjut, lihat Kebijakan penyembunyian yang telah ditentukan sebelumnya.
Contoh
Contoh 1: Buat kebijakan penghashan MD5 untuk 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 role pengembangan dan operasi suatu 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 ke kolom
Sintaks
--Bind a policy to a column APPLY DATA MASKING POLICY <policy_name> BIND TO TABLE <table_name> COLUMN <column_name>; --Unbind a specific masking policy from a sensitive data column APPLY DATA MASKING POLICY <policy_name> UNBIND FROM TABLE <table_name> COLUMN <column_name>; --Unbind all masking policies from a sensitive data column APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name> COLUMN <column_name>; --Unbind all masking policies from all sensitive data columns of a table APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name>;Parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyembunyian.
table_name
Ya
Nama tabel yang berisi data sensitif.
column_name
Ya
Nama kolom yang berisi data sensitif.
Lihat kebijakan penyembunyian
Sintaks
--View the creation information of a masking policy DESC DATA MASKING POLICY <policy_name>; --View a table's extended information, including its masking policies DESC EXTENDED <table_name>; --List the names of all masking policies in the current project LIST DATA MASKING POLICY; --List the names of masking policies bound to a specific user LIST DATA MASKING POLICY TO USER <user_name>; --List the names of masking policies bound to a specific role LIST DATA MASKING POLICY TO ROLE <role_name>; --List the names of all masking policies bound to a specific table LIST DATA MASKING POLICY ON <table_name>; --List the names of all masking policies bound to a specific column of a table LIST DATA MASKING POLICY ON <table_name> TO COLUMN <column_name>;Parameter
Parameter
Wajib
Deskripsi
policy_name
Ya
Nama kebijakan penyembunyian.
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 penyembunyian yang telah ditentukan sebelumnya
Kebijakan penyembunyian yang telah ditentukan sebelumnya mencakup metode seperti penyembunyian, penghashan, penggantian karakter, dan pembulatan. Pilih kebijakan berdasarkan tipe data dan kebutuhan perlindungan Anda.
Jenis kebijakan | Nama kebijakan | Sintaks | Deskripsi |
Umum | Tanpa penyembunyian | 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 bersangkutan. Untuk informasi lebih lanjut, lihat Nilai default untuk 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 angka ke jumlah tempat desimal tertentu, dari 0 hingga 5.
| |
Penyembunyian | Mask start and end | MASKED_STRING_MASKED_BA(<before>, <after>) | Menyembunyikan 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 | SHA-256 hashing | MASKED_SHA256(<salt>) | Menyembunyikan data menggunakan algoritma penghashan SHA-256.
|
SHA-512 hashing | MASKED_SHA512(<salt>) | Menyembunyikan data menggunakan algoritma penghashan SHA-512.
| |
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, termasuk 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 acak, termasuk angka dan huruf. Panjang string tetap tidak berubah.
| |
Fixed replacement | MASKED_REPLACE_FIXED(<position>, <fixed_string>) |
|
Contoh
Menyembunyikan informasi pribadi sensitif
Contoh ini menunjukkan cara mengonfigurasi kebijakan penyembunyian untuk menyembunyikan informasi pribadi sensitif.
Siapkan data.
Buat tabel untuk menyimpan informasi pribadi dan masukkan data sensitif.
-- Create a table for sensitive information. CREATE TABLE if NOT EXISTS personal_info ( id bigint COMMENT 'The unique ID of the user.', name string COMMENT 'The name of the user.', age int COMMENT 'The age of the user.', gender string COMMENT 'The gender of the user.', height float COMMENT 'The height of the user.', birthday date COMMENT 'The birth date of the user.', phone_number string COMMENT 'The phone number of the user.', email string COMMENT 'The email address of the user.', address string COMMENT 'The address of the user.', salary decimal(18, 2) COMMENT 'The salary of the user.', create_time timestamp COMMENT 'The time when the user information was created.', update_time timestamp COMMENT 'The time when the user information was updated.', is_deleted boolean COMMENT 'Indicates whether the user information is deleted.' ); -- Insert sensitive data. 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.
Untuk nama, pertahankan 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 tinggi 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, pertahankan hanya tahunnya.
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 tunduk pada kebijakan penyembunyian untuk mengkueri data.
SELECT id, name, height, birthday, phone_number FROM personal_info; -- Before masking +------------+-----------+--------+------------+--------------+ | 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 | +------------+-----------+--------+------------+--------------+ -- After masking +------------+------------+------------+------------+------------------------------------------------+ | id | name | height | birthday | phone_number | +------------+------------+------------+------------+------------------------------------------------+ | 1 | Z******** | 179.0 | 1990-01-01 | lvYJaH4ElL2ilpQx/8tfMUw7xP22yblIgmfWp0/msUQ= | | 2 | L**** | 163.0 | 1992-01-01 | 9fFWacNSwCRZLAjMHqunlfwkqhTbP2ubuDOeOSh4N1c= | | 3 | W****** | 185.0 | 1994-01-01 | k/0JoQCSarJg9ATJ5tyVnhQf1jIBxHXRbB+cvUm4OmE= | +------------+------------+------------+------------+------------------------------------------------+
Penyembunyian default
Contoh ini menunjukkan cara prioritas kebijakan bekerja saat pengguna atau role cocok dengan beberapa kebijakan penyembunyian.
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 tertentu 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 SHA-256.
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. Pengguna lain hanya cocok dengan kebijakan MASKED_SHA256(5).
Lampiran
Prioritas kebijakan
Saat beberapa kebijakan penyembunyian berlaku untuk satu pengguna, kebijakan dengan prioritas tertinggi yang akan digunakan.
Sebagai contoh, pengguna bernama A mengakses kolom col_string, dan ia cocok dengan dua kebijakan penyembunyian: 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) diterapkan. Pengguna A melihat data yang disembunyikan dengan karakter acak.
Prioritas | Kebijakan penyembunyian |
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 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 | '' (string biner kosong) |
FLOAT | 0.0 |
DOUBLE | 0.0 |
DECIMAL | 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 | (nilai default dari tipe bidang) |