全部产品
Search
文档中心

Hologres:Penyamaran data

更新时间:Jan 23, 2026

Hologres menyediakan fitur penyamaran data yang memungkinkan Anda menetapkan aturan penyamaran di tingkat kolom. Setelah fitur ini diaktifkan, data akan disamarkan dalam hasil kueri yang melibatkan informasi sensitif, sehingga meningkatkan perlindungan terhadap data sensitif dan pribadi. Topik ini menjelaskan cara mengaktifkan, menampilkan, dan menghapus aturan penyamaran data di Hologres.

Informasi latar belakang

Teknologi baru seperti data besar, cloud computing, dan artificial intelligence semakin umum digunakan. Teknologi-teknologi ini mendukung penambangan dan analisis data secara mendalam untuk mengungkap nilai dari data. Namun, penggunaan data yang luas ini juga menimbulkan tantangan dalam melindungi informasi sensitif dan pribadi.

Fitur penyamaran data di Hologres memungkinkan Anda menetapkan aturan penyamaran di tingkat pengguna dan kolom. Saat suatu kueri melibatkan data sensitif, hasilnya akan disamarkan. Dengan demikian, penyamaran data memungkinkan berbagi, menambang, dan menganalisis data secara efisien sekaligus memastikan bahwa informasi sensitif dan pribadi tetap tidak dapat diidentifikasi, sehingga meningkatkan perlindungan terhadap data tersebut.

Perbandingan versi

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

Feature

V3.1 dan yang lebih baru

V3.0 dan yang lebih lama

Masking for non-TEXT fields

Anda dapat menetapkan kebijakan penyamaran default untuk tipe data seperti INT, FLOAT, dan array. Ini hanya berlaku jika kebijakan penyamaran nilai default ditetapkan. Untuk informasi selengkapnya, lihat Default value.

Tidak didukung. Anda dapat menggunakan solusi sementara CAST TEXT, tetapi ini tidak disarankan.

View

Hasil disamarkan.

Hasil tidak disamarkan (tidak disarankan).

Masked fields in JOIN or WHERE clauses

Hasilnya kosong.

Hasil tidak disamarkan (tidak disarankan).

Flink consumption of binary logs for masked fields

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

  • Jika tabel yang dikonsumsi tidak disamarkan untuk pengguna tersebut, konsumsi log biner diizinkan 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 kolom yang disamarkan.

    • Mode FE mendukung konsumsi kolom yang disamarkan.

  • Untuk 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 penyamaran data untuk pengguna tersebut di semua tabel.

    -- Disable masking for this user.
    ALTER ROLE "<user>" SET hg_anon_enable = OFF;
    -- Disable masking for this user in a specific database.
    ALTER ROLE "<user>" IN DATABASE <database> SET hg_anon_enable = OFF;
  • Mulai dari V3.0.28, Anda dapat mengonsumsi log biner di mode Fixed FE dan FE meskipun parameter GUC terkait penyamaran data diaktifkan, asalkan tidak ada operasi penyamaran yang diterapkan pada hasil tabel untuk pengguna tersebut.

Direct read of masked fields from MaxCompute

Pembacaan langsung kolom Hologres yang disamarkan dari MaxCompute dilarang.

Pembacaan didukung (tidak disarankan).

Persiapan

Sebelum menggunakan penyamaran data, superuser harus mengaktifkan parameter-parameter 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 perintah di atas, sistem menerapkan perilaku penyamaran data yang sesuai dengan versi instans Hologres Anda. Anda juga dapat memilih perilaku penyamaran tertentu sesuai kebutuhan:

  • Jika perilaku penyamaran data di V3.1 atau yang lebih baru memiliki masalah signifikan dan tidak memenuhi kebutuhan bisnis Anda, Anda dapat kembali ke perilaku V3.0 dan yang lebih lama menggunakan parameter berikut.

    CALL hologres.set_hg_anon_version(1);
  • Instans V3.0 dan yang lebih lama tidak mendukung prosedur tersimpan `set_hg_anon_version`. Jika instans yang sudah menggunakan penyamaran data ditingkatkan ke V3.1, Anda harus menjalankan perintah berikut untuk mengaktifkan fitur penyamaran V3.1. Jika tidak, sistem akan terus menggunakan fitur penyamaran lama.

    CALL hologres.set_hg_anon_version(2);
    Catatan
    • Jika pernyataan berhasil dieksekusi, perilaku penyamaran data untuk V3.1 dan yang lebih baru diaktifkan.

    • Jika pernyataan gagal dengan pesan error `"Error: not safe to upgrade to hg_anon version 2"`, pengaktifan fitur gagal. Kegagalan ini terjadi karena penyamaran ditetapkan untuk tipe kolom non-TEXT, non-VARCHAR, atau non-CHAR di database saat ini, dan hasil penyamaran di V3.1 dan yang lebih baru tidak akan sesuai harapan. Anda harus memperbaiki konfigurasi penyamaran tersebut.

Batasan

  • Anda tidak dapat mengimpor data dari tabel dan kolom dengan aturan penyamaran ke tabel dan kolom tanpa aturan penyamaran. Pesan error terkait adalah sebagai berikut:

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

    ERROR: UNION is not support on security item
  • Penyamaran data dapat memengaruhi performa kueri. Dampaknya tergantung pada metode penyamaran dan volume data. Performa dapat menurun 10% hingga 20%. Dalam kasus ekstrem, performa bisa menjadi beberapa kali lebih lambat.

  • Anda tidak dapat menetapkan aturan penyamaran untuk tabel eksternal.

Penyamaran data

Menetapkan aturan penyamaran

Hologres mendukung penetapan aturan penyamaran data untuk kolom target atau pengguna target. Sebelum menetapkan aturan penyamaran, pastikan parameter GUC penyamaran data diaktifkan. Untuk informasi selengkapnya, lihat Persiapan.

  • Sintaks

    • Menetapkan kebijakan penyamaran untuk kolom

      Untuk menyamarkan data di beberapa kolom, Anda dapat mengeksekusi 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]';
  • 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 penyamaran yang telah ditentukan. Anda dapat menjalankan SHOW hg_anon_labels; untuk melihat nilai `label_name` yang ditetapkan untuk database saat ini.

    user_name

    ID akun. Anda dapat memperolehnya dari halaman Informasi Pengguna.

    masked|unmasked

    • `masked`: Gunakan penyamaran data.

    • `unmasked`: Jangan gunakan penyamaran data.

    Tabel berikut menjelaskan nilai `label_name` yang telah ditentukan.

    Tipe data

    label_name

    Kebijakan penyamaran

    Jenis penyamaran

    Deskripsi

    Contoh Penyamaran Data

    TEXT

    name

    name

    mask

    Menyamarkan nama.

    • Sebelum penyamaran: Li Hua; Setelah penyamaran: *Hua.

    • Sebelum penyamaran: Wang Xiaoqiang; Setelah penyamaran: **qiang.

    email

    email

    mask

    Menyamarkan alamat email.

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

    ip

    ip

    mask

    Menyamarkan alamat IP.

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

    id

    id

    mask

    Menyamarkan nomor KTP.

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

    phone

    phone

    mask

    Menyamarkan nomor telepon.

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

    bank_id

    bank_id

    mask

    Menyamarkan nomor kartu bank atau kartu kredit.

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

    hash

    md5

    hash

    Menyamarkan data menggunakan algoritma MD5.

    Sebelum penyamaran: Wenyixi Road, Hangzhou, Zhejiang; Setelah penyamaran: dbf894b409d4a2ef17dfd9c7fdcafcd8.

    first_mask

    first_mask

    mask

    Menetapkan aturan `first_mask` yang hanya menampilkan karakter pertama.

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

    Tipe seperti INT dan FLOAT

    Default

    default_value

    default_value

    Menyamarkan data dengan nilai default.

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

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

    Tabel berikut memetakan tipe data ke nilai penyamaran 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

Menampilkan aturan penyamaran

  • Menampilkan aturan penyamaran yang ditetapkan untuk kolom

    -- View 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;
  • Menampilkan aturan penyamaran yang ditetapkan untuk pengguna

    -- View masking rules set for users.
    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 penyamaran data yang dikonfigurasi tidak memenuhi kebutuhan bisnis Anda, Anda dapat menyesuaikannya dengan memodifikasi 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 Anda mengeksekusi perintah ALTER DATABASE, koneksi saat ini menjadi tidak valid. Anda harus membuat koneksi baru. Anda dapat mengeksekusi perintah berikut untuk memeriksa apakah pengaturan baru 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 penyamaran

    Deskripsi konten yang disamarkan

    Contoh hasil penyamaran data

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

    Menyamarkan alamat IP.

    192.*.*.*

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

    Menyamarkan alamat email.

    abc***@example.net

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

    Menyamarkan nama.

    Five

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

    Menyamarkan data dengan 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}}

    Menyamarkan konten kustom.

    None

Contoh

Data sampel

Anda dapat menyiapkan sumber data atau 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');

Menetapkan aturan penyamaran untuk kolom

-- Create the hg_anon extension function.
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';

Setelah membuat koneksi baru, Anda dapat menjalankan perintah berikut untuk melihat hasil yang disamarkan.

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;

Anda dapat menjalankan perintah berikut untuk melihat hasil setelah membatalkan aturan penyamaran 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

-- Cancel all masking for the basic account.
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';

Anda dapat menjalankan perintah berikut untuk melihat hasil setelah membatalkan aturan penyamaran 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

-- 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 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 yang lebih baru yang mendukung penyamaran data menggunakan Penjaga Keamanan Data.

      Catatan

      Jika instans Anda lebih lama dari V1.1, lihat Kesalahan persiapan upgrade umum atau bergabunglah dengan grup DingTalk Hologres untuk memberikan masukan. Untuk informasi selengkapnya, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.

    • Untuk mendeteksi data sensitif, Penjaga Keamanan Data mengonfigurasi aturan untuk mengecualikan akun root dari penyamaran data.

    • Setiap hari pukul 09.00.00, Penjaga Keamanan Data melakukan sampling data, mendeteksi data sensitif, dan menetapkan aturan penyamaran untuk kolom data sensitif yang teridentifikasi.

    • Saat ini, penyamaran data dengan Penjaga Keamanan Data didukung untuk Hologres di wilayah-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 penyamaran data.

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

      -- Install the data masking EXTENSION.
      CREATE EXTENSION IF NOT EXISTS hg_anon;
      -- Enable data masking for the specified database. The feature is disabled by 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 parameter GUC. Setelah Anda menjalankan perintah ALTER DATABASE, perubahan tersebut tidak berlaku pada koneksi saat ini.

      • Anda dapat menjalankan perintah SQL berikut untuk memeriksa apakah pengaturan telah berlaku.

        SHOW hg_anon_enable;
    • Tetapkan database untuk penyamaran data.

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

      2. Pada panel navigasi, klik Rule Configuration > Data Detection Rules untuk menuju halaman Data Detection Rules.

      3. Pada halaman Sensitive Data Detection, buat aturan deteksi data. Untuk informasi selengkapnya, lihat Data detection rules.

      4. Pada panel navigasi, 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 Masking Database di sebelah kanan.

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

      7. Pada halaman Data Masking Management, klik Create Masking Rule di pojok kanan atas. Untuk informasi selengkapnya, lihat Data Masking Management. Sistem kemudian akan menyamarkan database yang telah Anda tetapkan.

FAQ

Data tidak disamarkan setelah mengikuti contoh

  • Gejala: Setelah mengikuti langkah-langkah dalam contoh, data yang dikueri tidak disamarkan.

  • Kemungkinan penyebab:

    • Aturan dikonfigurasi untuk tidak menyamarkan data bagi beberapa pengguna.

    • Label penyamaran belum ditetapkan.

  • Solusi:

    • Jalankan perintah SQL berikut untuk memeriksa apakah aturan dikonfigurasi untuk tidak menyamarkan data bagi 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 kosong. Artinya penyamaran data diperlukan untuk semua pengguna. Jika hasilnya tidak kosong, Anda harus menetapkan pengguna untuk penyamaran data.

    • Jalankan perintah SQL berikut untuk memeriksa label penyamaran yang dikonfigurasi.

      SHOW hg_anon_labels;

      Jika hasilnya tidak mencakup label seperti ip, Anda dapat menjalankan perintah SQL berikut untuk menetapkan label penyamaran.

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