All Products
Search
Document Center

MaxCompute:Penyembunyian data dinamis

Last Updated:Aug 06, 2026

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.

image

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.

image

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 Manage Configurations > Projects. 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 perintah list users; untuk melihat informasi pengguna.

    • ROLE: Menerapkan kebijakan untuk role tertentu. Di <role_list>, tentukan nama rolenya. Anda dapat menjalankan perintah list 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.

  • Tipe data yang didukung: Semua.

  • Contoh

    -- Before masking (data type: STRING)
    +-----------------+
    | col_string      |
    +-----------------+
    | Michael Johnson |
    +-----------------+
    
    -- Masking policy
    MASKED_NULLIFY
    
    -- After masking
    +------------+
    | col_string | 
    +------------+
    | 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.

  • Tipe data yang didukung: Semua.

  • Contoh

    -- Before masking (data type: TIMESTAMP)
    +---------------------+
    | col_timestamp       |
    +---------------------+
    | 2024-05-01 11:12:13 |
    +---------------------+
    -- Masking policy
    MASKED_DV
    -- After masking (The default project time zone is China Standard Time, UTC+8)
    +---------------------+
    | col_timestamp       | 
    +---------------------+
    | 1970-01-01 08:00:00 | 
    +---------------------+

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).

  • Tipe data yang didukung: DATE, DATETIME, TIMESTAMP_NTZ, dan TIMESTAMP.

  • Contoh

    -- Before masking (data type: TIMESTAMP)
    +---------------------+
    | col_timestamp       |
    +---------------------+
    | 2024-05-01 11:12:13 |
    +---------------------+
    -- Masking policy
    MASKED_DATE_YEAR
    -- After masking (The default project time zone is China Standard Time, UTC+8)
    +---------------------+
    | col_timestamp       | 
    +---------------------+
    | 2024-01-01 08:00:00 | 
    +---------------------+

Pembulatan

MASKED_POINT_RESERVE(<num>)

Membulatkan angka ke jumlah tempat desimal tertentu, dari 0 hingga 5.

  • num: Jumlah tempat desimal yang dipertahankan. Nilainya harus bilangan bulat dari 0 hingga 5.

  • Tipe data yang didukung: DECIMAL, FLOAT, dan DOUBLE.

  • Contoh

    -- Before masking (data type: FLOAT)
    +-----------+
    | col_float |
    +-----------+
    | 1.12345   |
    +-----------+
    -- Masking policy: retain 2 decimal places
    MASKED_POINT_RESERVE(2)
    -- After masking
    +-----------+
    | col_float | 
    +-----------+
    | 1.12      | 
    +-----------+

Penyembunyian

Mask start and end

MASKED_STRING_MASKED_BA(<before>, <after>)

Menyembunyikan awal dan akhir string dengan tanda bintang (*) dan menampilkan bagian tengah dalam teks biasa.

  • before: Awal string diganti dengan *. Parameter before menentukan panjang mask dan harus berupa bilangan bulat ≥ 0. Jika before = 0, awal string tidak disembunyikan.

  • after: Akhir string diganti dengan *. Panjang mask ditentukan oleh parameter after, yang harus berupa bilangan bulat ≥ 0.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +-----------------+
    | col_string      |
    +-----------------+
    | Michael Johnson |
    +-----------------+
    -- Masking policy: replace the first 3 and last 3 characters with asterisks.
    MASKED_STRING_MASKED_BA(3, 3)
    -- After masking
    +-----------------+
    | col_string      | 
    +-----------------+
    | ***hael John*** | 
    +-----------------+

Mask middle

MASKED_STRING_UNMASKED_BA(<before>, <after>)

Menampilkan awal dan akhir string dalam teks biasa dan menyembunyikan bagian tengah dengan tanda bintang (*).

  • before: Jumlah karakter yang ditampilkan dalam teks biasa di awal string. Nilainya harus bilangan bulat ≥ 0.

  • after: Jumlah karakter yang ditampilkan dalam teks biasa di akhir string. Nilainya harus bilangan bulat ≥ 0.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +-----------------+
    | col_string      |
    +-----------------+
    | Michael Johnson |
    +-----------------+
    -- Masking policy: display the first and last characters in plaintext.
    MASKED_STRING_UNMASKED_BA(1, 1)
    -- After masking
    +-----------------+
    | col_string      | 
    +-----------------+
    | M*************n | 
    +-----------------+

Hashing

SHA-256 hashing

MASKED_SHA256(<salt>)

Menyembunyikan data menggunakan algoritma penghashan SHA-256.

  • salt: Salt. Nilainya harus bilangan bulat dari 0 hingga 9.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +------------------------+
    | col_string             | 
    +------------------------+
    | 4562-1234-5678-9123    | 
    +------------------------+
    -- Masking policy
    MASKED_SHA256(0)
    -- After masking
    +------------------------------------------------+
    | col_string                                     | 
    +------------------------------------------------+
    | zwGMB1aCF1t705EfcwdDorql4MZb46XBqQJw/2RVx8U=    | 
    +------------------------------------------------+

SHA-512 hashing

MASKED_SHA512(<salt>)

Menyembunyikan data menggunakan algoritma penghashan SHA-512.

  • salt: Salt. Nilainya harus bilangan bulat dari 0 hingga 9.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +------------------------+
    | col_string             | 
    +------------------------+
    | 4562-1234-5678-9123    | 
    +------------------------+
    -- Masking policy
    MASKED_SHA512(0)
    -- After masking
    +------------------------------------------------------------------------------------------+
    | col_string                                                                               | 
    +------------------------------------------------------------------------------------------+
    | 3PPywfEIp08WuTUI8FZCCfdVuRu68wZTVwWWVAf4pboACUnH6w9kFMLpl2AARaGW/mvWvg26p0EIqmE0fAEiuA== | 
    +------------------------------------------------------------------------------------------+

MD5 hashing

MASKED_MD5(<salt>)

Menyembunyikan data menggunakan algoritma penghashan MD5.

  • salt: Salt. Nilainya harus bilangan bulat dari 0 hingga 9.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +------------------------+
    | col_string             | 
    +------------------------+
    | 4562-1234-5678-9123    | 
    +------------------------+
    -- Masking policy
    MASKED_MD5(0)
    -- After masking
    +--------------------------+
    | col_string               | 
    +--------------------------+
    | mK/o08tew5g7S3XV/BkFfw== | 
    +--------------------------+

SM3 hashing

MASKED_SM3(<salt>)

Menyembunyikan data menggunakan algoritma penghashan SM3.

  • salt: Salt. Nilainya harus bilangan bulat dari 0 hingga 9.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +------------------------+
    | col_string             | 
    +------------------------+
    | 4562-1234-5678-9123    | 
    +------------------------+
    -- Masking policy
    MASKED_SM3(0)
    -- After masking
    +------------------------------------------------+
    | col_string                                     | 
    +------------------------------------------------+
    | Q2TfwUh4B8QQH8jPL6DfdoGysx/CXBxn2T14dDwQtQw=    | 
    +------------------------------------------------+

Penggantian karakter

Random replacement

MASKED_REPLACE_RANDOM(<position>)

Mengganti data dengan karakter acak, termasuk angka dan huruf. Panjang string tetap tidak berubah.

  • position: Bilangan bulat yang menentukan posisi mulai penggantian.

    • Jika position = 0, seluruh string diganti dengan karakter acak.

    • Jika position > 0, position karakter pertama diganti dengan karakter acak.

    • Jika position < 0, N karakter terakhir diganti, dengan N adalah nilai absolut dari position.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +-----------------+
    | col_string      |
    +-----------------+
    | Michael Johnson |
    +-----------------+
    -- Masking policy: replace the first 7 characters with random characters.
    MASKED_REPLACE_RANDOM(7)
    -- After masking
    +-----------------+
    | col_string      | 
    +-----------------+
    | 4DlJQxi Johnson | 
    +-----------------+

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.

  • before: Jumlah karakter yang diganti di awal string. Nilainya harus bilangan bulat ≥ 0. Jika nilainya 0, tidak ada karakter yang diganti di awal.

  • after: Jumlah karakter yang diganti di akhir string. Nilainya harus bilangan bulat ≥ 0.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +-----------------+
    | col_string      |
    +-----------------+
    | Michael Johnson |
    +-----------------+
    -- Masking policy: replace the first 4 and last 4 characters with random characters.
    MASKED_REPLACE_RANDOM_BA(4,4)
    -- After masking
    +------------------+
    | col_string       | 
    +------------------+
    | r0xEael JohnWNr  | 
    +------------------+

Fixed replacement

MASKED_REPLACE_FIXED(<position>, <fixed_string>)

  • Mengganti data dengan string tetap.

  • position: Bilangan bulat yang menentukan lokasi penggantian.

    • Jika position = 0, seluruh string diganti dengan fixed_string.

    • Jika position > 0, position karakter pertama diganti dengan fixed_string.

    • Jika position < 0, N karakter terakhir diganti dengan fixed_string, dengan N adalah nilai absolut dari position.

  • fixed_string: String pengganti. Panjangnya maksimal 100 karakter dan tidak boleh mengandung spasi.

  • Tipe data yang didukung: STRING, VARCHAR, CHAR, dan BINARY.

  • Contoh

    -- Before masking (data type: STRING)
    +-----------------+
    | col_string      |
    +-----------------+
    | Michael Johnson |
    +-----------------+
    -- Masking policy: replace the first 7 characters with the fixed string "Oli".
    MASKED_REPLACE_FIXED(7, "Oli")
    -- After masking
    +-------------+
    | col_string  | 
    +-------------+
    | Oli Johnson | 
    +-------------+

Contoh

Menyembunyikan informasi pribadi sensitif

Contoh ini menunjukkan cara mengonfigurasi kebijakan penyembunyian untuk menyembunyikan informasi pribadi sensitif.

  1. 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);
  2. 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;
  3. 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.

Catatan

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)