全部产品
Search
文档中心

Hologres:Data masking

更新时间:Feb 05, 2026

Hologres menyediakan fitur penyamaran data yang memungkinkan Anda menetapkan aturan masking di tingkat kolom. Saat diaktifkan, kueri yang melibatkan informasi sensitif akan mengembalikan hasil yang telah dimasking, sehingga meningkatkan perlindungan terhadap data sensitif dan pribadi. Topik ini menjelaskan cara mengaktifkan, mengkueri, dan menghapus penyamaran data di Hologres.

Informasi latar belakang

Era data besar telah memperkenalkan teknologi seperti data besar, cloud computing, dan artificial intelligence, yang memungkinkan penambangan dan analisis data secara mendalam untuk membuka nilai besar dalam set data skala besar. Namun, hal ini juga menimbulkan tantangan dalam melindungi informasi sensitif dan pribadi.

Penyamaran data Hologres memungkinkan Anda mengonfigurasi kebijakan masking baik di tingkat pengguna maupun kolom. Ketika suatu kueri melibatkan data sensitif, hasilnya secara otomatis dimasking. Hal ini memungkinkan berbagi, menambang, dan menganalisis data secara efisien sekaligus memastikan informasi sensitif dan pribadi tetap tidak dapat diidentifikasi, sehingga meningkatkan perlindungan data.

Perbandingan versi

Mulai dari V3.1, Hologres telah mengoptimalkan perilaku penyamaran datanya. Tabel berikut membandingkan fitur-fitur pada V3.1 dan versi setelahnya dengan versi-versi sebelumnya untuk membantu Anda menggunakan penyamaran data secara efektif.

Feature

V3.1 dan yang lebih baru

V3.0 dan yang lebih lama

Masking for non-TEXT fields

Mendukung pengaturan kebijakan masking default untuk tipe seperti INT, FLOAT, dan array. Ini hanya berlaku ketika kebijakan masking diatur ke nilai default. Untuk informasi lebih lanjut, lihat Default value.

Tidak didukung. Namun, Anda dapat melewati masking menggunakan CAST TEXT. Hal ini tidak disarankan.

View

Hasil disamarkan.

Hasil tidak dimasking. Hal ini tidak disarankan.

Masked fields in JOIN or WHERE clauses

Hasilnya kosong.

Hasil tidak dimasking. Hal ini tidak disarankan.

Flink mengonsumsi binary logs dari bidang yang dimasking

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

  • Jika tabel yang dikonsumsi tidak dimasking untuk pengguna tersebut, binary logging dapat dikonsumsi di semua mode.

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

    • Mode Fixed FE tidak mendukung konsumsi bidang yang dimasking.

    • Mode FE mendukung konsumsi bidang yang dimasking.

  • Untuk versi dari V3.0.19 hingga V3.0.27

    Kedua mode Fixed FE dan FE melarang konsumsi binary logging. Untuk mengonsumsi data, Anda harus membatalkan penyamaran data untuk semua tabel bagi pengguna tersebut.

    -- Nonaktifkan masking untuk pengguna ini
    ALTER ROLE "<user>" SET hg_anon_enable = OFF;
    -- Nonaktifkan masking untuk pengguna ini di database tertentu
    ALTER ROLE "<user>" IN DATABASE <database> SET hg_anon_enable = OFF;
  • Mulai dari V3.0.28, meskipun GUC terkait penyamaran data diaktifkan, Anda tetap dapat mengonsumsi binary logs di mode Fixed FE dan FE jika tidak ada operasi masking yang dilakukan pada hasil tabel.

MaxCompute membaca langsung bidang yang dimasking

Menolak pembacaan langsung bidang Hologres yang dimasking dari MaxCompute.

Pembacaan didukung. Hal ini tidak disarankan.

Persiapan

Sebelum menggunakan penyamaran data, Superuser harus mengaktifkan parameter berikut di tingkat database.

-- Dieksekusi oleh superuser
CREATE EXTENSION IF NOT EXISTS hg_anon;  
ALTER DATABASE <current_db> SET hg_anon_enable = on;

Setelah menjalankan kode di atas, sistem akan menggunakan perilaku penyamaran data sesuai dengan versi instans Hologres. Anda juga dapat memilih perilaku masking sesuai kebutuhan:

  • Jika perilaku penyamaran data di V3.1 atau versi setelahnya memiliki bug signifikan yang menyebabkan hasil tak terduga, Anda dapat menggunakan parameter berikut untuk kembali ke perilaku versi V3.0 dan sebelumnya.

    CALL hologres.set_hg_anon_version(1);
  • Instans V3.0 dan sebelumnya tidak mendukung prosedur tersimpan set_hg_anon_version. Jika instans yang telah menggunakan fitur masking ditingkatkan ke V3.1, Anda dapat menjalankan perintah berikut untuk mengaktifkan fitur masking V3.1. Jika tidak, sistem akan terus menggunakan fitur masking lama.

    CALL hologres.set_hg_anon_version(2);
    Catatan
    • Jika pernyataan berhasil dijalankan, perilaku penyamaran data V3.1 dan setelahnya diaktifkan.

    • Jika pernyataan gagal dengan log error "Error: not safe to upgrade to hg_anon version 2", fitur gagal diaktifkan. Hal ini karena masking diatur untuk tipe kolom non-TEXT/VARCHAR/CHAR di DB saat ini, dan hasil masking untuk V3.1 dan setelahnya tidak sesuai harapan. Anda perlu memperbaiki perilaku masking tersebut.

Batasan

  • Mengimpor data dari tabel dan kolom dengan aturan masking ke tabel dan kolom tanpa aturan masking tidak didukung. Pesan error terkait adalah sebagai berikut.

    Error: ERROR: The insert table has not set SECURITY LABEL
  • Kueri UNION dan DISTINCT pada tabel dengan aturan masking tidak didukung. Pesan error terkait adalah sebagai berikut.

    Error: ERROR: UNION is not support on security item
  • Penyamaran data dapat memengaruhi kinerja kueri. Dampaknya tergantung pada metode masking dan volume data. Kinerja dapat menurun 10% hingga 20%. Dalam skenario ekstrem, kinerja dapat menurun beberapa kali lipat.

  • Menetapkan aturan masking untuk tabel eksternal tidak didukung.

Penyamaran data

Menetapkan aturan penyamaran

Hologres mendukung pengaturan penyamaran data untuk kolom target atau pengguna target. Sebelum menetapkan penyamaran data, Anda harus mengaktifkan parameter GUC penyamaran data. Untuk informasi lebih lanjut, lihat Persiapan.

  • Sintaks

    • Menetapkan kebijakan penyamaran untuk kolom

      Untuk memask data di beberapa kolom, jalankan pernyataan ini beberapa kali.

      SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value';
    • Menetapkan kebijakan penyamaran untuk pengguna

       SECURITY LABEL FOR hg_anon ON ROLE <user_name> IS '[<label_name>|all]:[masked|unmasked]';
  • Deskripsi parameter

    Parameter

    Deskripsi

    hg_anon

    `hg_anon` adalah Fungsi ekstensi yang dikapsulkan dalam Hologres. Anda harus memanggil Fungsi ekstensi ini untuk mengaktifkan fitur penyamaran data.

    tablename

    Nama tabel yang berisi kolom yang akan disamarkan.

    col_name

    Nama kolom yang akan disamarkan.

    label_name

    Fungsi masking preset dalam sistem. Anda dapat menjalankan SHOW hg_anon_labels; untuk melihat `label_name` yang ditetapkan untuk database saat ini.

    user_name

    ID akun. Anda dapat memperolehnya dari halaman Informasi Pengguna.

    masked|unmasked

    • masked: Gunakan data masking.

    • unmasked: Jangan gunakan data masking.

    Tabel berikut menjelaskan nilai label_name preset.

    Tipe data

    label_name

    Kebijakan penyamaran

    Jenis penyamaran

    Deskripsi

    Contoh masking

    TEXT

    name

    name

    mask

    Masking nama.

    • Sebelum: Li Hua; Setelah: * Hua.

    • Sebelum: Wang Xiaoqiang; Setelah: ** Qiang.

    email

    email

    mask

    Masking alamat email.

    Sebelum: lihu***@alibaba.com; Setelah: lih***@alibaba.com.

    ip

    ip

    mask

    Masking alamat IP.

    Sebelum: 1.2.3.4; Setelah: 1.*.*.*.

    id

    id

    mask

    Masking nomor KTP.

    Sebelum: 110345188812011234; Setelah: 1****************4.

    phone

    phone

    mask

    Masking nomor telepon.

    Sebelum: 1390000****; Setelah: *********34.

    bank_id

    bank_id

    mask

    Masking akun kartu bank atau kartu kredit.

    Sebelum: 2349867902834701928; Setelah: ***************1928.

    hash

    md5

    hash

    Gunakan algoritma MD5 untuk masking.

    Sebelum: Wenyi West Road, Hangzhou, Zhejiang; Setelah: dbf894b409d4a2ef17dfd9c7fdcafcd8.

    first_mask

    first_mask

    mask

    Aturan `first_mask` didefinisikan untuk hanya menampilkan karakter pertama.

    Sebelum: 123456789; Setelah: 1********.

    Tipe seperti INT dan FLOAT

    Default

    default_value

    default_value

    Mask dengan nilai default.

    Catatan
    • Jika `label_name` tidak ada saat Anda menetapkan data masking, sistem akan kembali ke masking nilai default.

    • Ini hanya didukung di Hologres V3.1 dan yang lebih baru.

    Pemetaan antara tipe data dan nilai masked default adalah sebagai berikut:

    • 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 yang ditetapkan

  • Lihat masking yang ditetapkan untuk kolom

    -- Lihat masking yang ditetapkan untuk kolom
    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;
  • Lihat masking yang ditetapkan untuk pengguna

    -- Lihat aturan masking yang ditetapkan untuk pengguna
    SELECT
        usename,
        label
    FROM
        pg_shseclabel s
        INNER JOIN pg_catalog.pg_user u ON s.objoid = u.usesysid;

Memodifikasi aturan penyamaran kustom

Jika aturan masking yang ditetapkan tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikannya dengan mengubah parameter GUC hg_anon_lables.

  • Sintaks

    -- label_name is your custom name, and method is a built-in Hologres method.
    ALTER DATABASE <db_name> SET hg_anon_labels = '[   
    {"label": <label_name1>, "method":<method1>},  
    {"label": <label_name2>, "method":<method2>}, 
    ...  ]'; 

    Setelah menjalankan perintah ALTER DATABASE, perubahan tidak berlaku pada koneksi saat ini. 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":""}}]';

    Deskripsi parameter:

    Item penyamaran

    Deskripsi konten masking

    Contoh hasil masking

    {"desensType":"mask", "type":"ip"}

    Masking alamat IP.

    192.*.*.*

    {"desensType":"mask", "type":"email"}

    Masking alamat email.

    abc***@example.net

    {"desensType":"mask", "type":"name"}

    Masking nama.

    *Lima

    {"desensType":"hash", "type":"md5", "salt":""}

    Masking 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}}

    Masking konten kustom.

    None

Contoh penggunaan

Data sampel

Siapkan sumber data. Anda juga dapat menggunakan data bisnis Anda sendiri.

-- Buat database
CREATE DATABASE hg_anon_demo;
-- Buat tabel data sampel
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);
-- Masukkan data sampel
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');

Menetapkan aturan penyamaran untuk kolom

-- Buat fungsi ekstensi hg_anon.
CREATE EXTENSION IF NOT EXISTS hg_anon;

-- Aktifkan fitur data masking untuk database hg_anon_demo.
ALTER DATABASE hg_anon_demo SET hg_anon_enable = on;

-- Tetapkan aturan masking untuk setiap kolom.
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';

Setelah membuat koneksi baru, gunakan 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)

Membatalkan penyamaran untuk 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;

Gunakan perintah berikut untuk melihat hasil setelah membatalkan masking untuk kolom.

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)

Membatalkan aturan penyamaran untuk pengguna

-- Batalkan semua masking untuk akun BASIC$test.
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';

Gunakan perintah berikut untuk melihat hasil setelah membatalkan masking untuk pengguna.

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)

Menetapkan penyamaran untuk kolom JOIN

-- Contoh penetapan masking untuk kolom JOIN
CREATE TABLE tbl1 (
    id text
);
INSERT INTO tbl1
    VALUES ('142732199102290022');

-- Kolom id tabel personal_basic_information sudah dimasking.
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 Penjaga Keamanan Data untuk penyamaran data

Anda dapat menetapkan aturan penyamaran secara manual atau menggunakan Penjaga Keamanan Data untuk penyamaran data.

  • Batasan

    • Hanya Hologres V1.1 dan setelahnya yang mendukung penggunaan Data Security Guard untuk penyamaran data.

      Catatan

      Jika instans Anda sebelum V1.1, lihat Kesalahan persiapan upgrade umum atau berikan masukan di grup DingTalk Hologres. Untuk informasi lebih lanjut, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.

    • Untuk mendeteksi data sensitif, Data Security Guard menetapkan aturan agar tidak memask data untuk akun root.

    • Saat ini, setiap hari pukul 09.00.00, Data Security Guard mengambil sampel data, mengidentifikasi data sensitif, dan menetapkan aturan masking untuk kolom data sensitif yang teridentifikasi.

    • Saat ini, Hologres mendukung penyamaran data menggunakan Data Security Guard di wilayah berikut: Tiongkok (Beijing), Tiongkok (Zhangjiakou), Tiongkok (Shanghai), Tiongkok (Hangzhou), Tiongkok (Shenzhen), Tiongkok (Hong Kong), Singapura, Jerman (Frankfurt), Malaysia (Kuala Lumpur), Indonesia (Jakarta), dan AS (Silicon Valley).

  • Penggunaan

    • Aktifkan fitur masking.

      Fitur penyamaran data dinonaktifkan secara default. Pengguna dengan izin Superuser harus menjalankan perintah berikut di database yang sesuai untuk mengaktifkannya.

      -- Instal EXTENSION data masking
      CREATE EXTENSION IF NOT EXISTS hg_anon;
      -- Aktifkan fitur data masking untuk database yang ditentukan. Fitur ini dinonaktifkan secara default. 
      ALTER DATABASE <db_name> SET hg_anon_enable = on;  

      db_name adalah database tempat Anda ingin mengaktifkan penyamaran data.

      Penting
      • hg_anon_enable adalah GUC. Perubahan tidak berlaku pada koneksi saat ini setelah Anda menjalankan perintah ALTER DATABASE.

      • Anda dapat menggunakan pernyataan SQL berikut untuk memeriksa apakah pengaturan telah berlaku.

        SHOW hg_anon_enable;
    • Tetapkan database untuk masking.

      1. Login ke Konsol Penjaga Keamanan Data. Untuk informasi selengkapnya, lihat Masuk ke Penjaga Keamanan Data.

      2. Di panel navigasi sebelah kiri, klik Rule Configuration > Data Identification Rules untuk membuka halaman Data Identification Rules.

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

      4. Di panel navigasi sebelah kiri, klik Data Masking Management untuk membuka halaman Data Masking Management.

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

      6. Di kotak dialog Authorize Account for Masking, pilih database yang akan dimasking dari daftar Unmasked Databases untuk memindahkannya ke daftar Masked Databases. Pilih I agree to authorize Data Security Guard to mask this database, lalu klik OK.授权账号脱敏

      7. Di halaman Data Masking Management, klik New Masking Rule di pojok kanan atas. Untuk informasi lebih lanjut, lihat Data masking management. Sistem kemudian akan memask database yang Anda tetapkan.

FAQ

Data tidak dimasking setelah mengikuti contoh penggunaan

  • Gejala: Setelah mengikuti contoh penggunaan, Anda menemukan bahwa data yang dikueri tidak dimasking.

  • Kemungkinan penyebab:

    • Aturan ditetapkan agar tidak memask data untuk beberapa pengguna.

    • Tidak ada label masking yang ditetapkan.

  • Solusi:

    • Jalankan perintah SQL berikut untuk memeriksa apakah aturan ditetapkan agar tidak memask data untuk beberapa pengguna.

      SELECT
        usename,
        label
      FROM pg_shseclabel s
      INNER JOIN pg_catalog.pg_user u on s.objoid = u.usesysid;

      Secara default, hasil kueri pernyataan SQL ini kosong, yang berarti data harus dimasking untuk semua pengguna. Jika hasilnya tidak kosong, tetapkan pengguna untuk penyamaran data.

    • Gunakan pernyataan SQL berikut untuk memeriksa label masking yang ditetapkan.

      SHOW hg_anon_labels;

      Jika hasilnya tidak berisi label seperti ip, jalankan perintah SQL berikut untuk menetapkan label masking.

      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 aturan yang sesuai dengan label di atas, lihat Detail label_name preset.