All Products
Search
Document Center

Hologres:Data masking

Last Updated:Jun 26, 2026

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 CAST TEXT. (Tidak disarankan)

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

  • Jika tabel yang dikonsumsi dimasking untuk pengguna tersebut, konsumsi log biner dilarang di semua mode.

  • Jika tabel yang dikonsumsi tidak dimasking untuk pengguna tersebut, konsumsi log biner diizinkan di semua mode.

  • Pada versi sebelum V2.2.38 dan versi dari V3.0.1 hingga V3.0.19:

    • Mode Fixed FE tidak mendukung konsumsi kolom yang dimasking.

    • Mode FE mendukung konsumsi kolom yang dimasking.

  • Pada versi dari V3.0.19 hingga V3.0.27:

    Kedua mode Fixed FE dan FE melarang konsumsi log biner. Untuk mengonsumsi log biner, Anda harus menonaktifkan data masking untuk pengguna tersebut di semua tabel.

    -- Disable data masking for this user.
    ALTER ROLE "<user>" SET hg_anon_enable = OFF;
    -- Disable data masking for this user in a single database.
    ALTER ROLE "<user>" IN DATABASE <database> SET hg_anon_enable = OFF;
  • Mulai dari V3.0.28, Anda dapat mengonsumsi log biner dalam mode Fixed FE dan FE jika Anda belum menerapkan aturan masking pada hasil tabel, meskipun parameter GUC terkait data masking diaktifkan.

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 UNION atau DISTINCT pada 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 melihat label_name yang 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_name yang 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_mask hanya 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_name yang 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.

      Catatan

      Jika 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_enable adalah 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.

      1. Login ke konsol Data Security Guard. Untuk informasi lebih lanjut, lihat Go to the Data Security Guard page.

      2. Di bilah navigasi kiri, klik Rule Configurations > Data Identification Rule untuk menuju halaman Data Identification Rule.

      3. Di halaman Sensitive Data Identification, buat aturan identifikasi data. Untuk informasi lebih lanjut, lihat Data identification rules.

      4. Di bilah navigasi kiri, klik Data Masking Management untuk menuju halaman Data Masking Management.

      5. Dari daftar drop-down Masking Scenario, pilih Hologres display masking (hologres_display_desense_code), lalu klik Select Database for Masking di sebelah kanan.

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

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