Tüm Ürünler
Search
Belge Merkezi

Hologres:Data masking

Son Güncelleme:Oct 06, 2026

Hologres, sütun düzeyinde hassas verileri korumak için veri maskeleme özelliği sunar. Bu özellik etkinleştirildiğinde, sorgu sonuçlarındaki hassas veriler otomatik olarak maskelenir ve veri güvenliği artırılır. Bu konuda, veri maskelemenin nasıl etkinleştirileceği ve maskeleme kurallarının nasıl yönetileceği açıklanmaktadır.

Arka plan

Cloud computing ve yapay zeka gibi büyük veri teknolojilerinin yaygınlaşması, veriden elde edilen değeri benzeri görülmemiş bir düzeye taşımaktadır. Ancak bu durum, hassas ve özel bilgilerin korunması konusunda önemli zorluklar da ortaya çıkarmaktadır.

Hologres veri maskeleme ile kullanıcı ve sütun düzeylerinde kurallar tanımlayabilirsiniz. Sorgulama sırasında veriler bu kurallara göre maskelenir ve hassas bilgilerin yetkisiz kişilere ifşa edilmesi önlenir. Bu sayede, özel bilgiler tanımlanamaz halde kalırken verilerinizi güvenli bir şekilde paylaşabilir ve analiz edebilirsiniz.

Sürüm karşılaştırması

Hologres, V3.1 sürümünden itibaren veri maskeleme davranışını optimize etmiştir. Aşağıdaki tabloda, V3.1 ve sonraki sürümler ile önceki sürümler arasındaki özellikler karşılaştırılmaktadır.

Özellik

V3.1 ve sonrası

V3.0 ve öncesi

TEXT dışındaki veri türleri için maskeleme

INT, FLOAT ve dizi gibi veri türleri için varsayılan maskeleme ilkelerini destekler. Bu ilkeler yalnızca maskeleme ilkesi varsayılan değer kullanacak şekilde ayarlandığında geçerli olur. Daha fazla bilgi için bkz. Varsayılan değerler.

Desteklenmez. CAST TEXT kullanarak geçici bir çözüm uygulayabilirsiniz. (Önerilmez)

Görünüm

Sonuçlar maskelenir.

Sonuçlar maskelenmez. (Önerilmez)

Maskelenmiş sütunları içeren JOIN veya WHERE yan tümceleri

Sonuç boştur.

Sonuçlar maskelenmez. (Önerilmez)

Maskelenmiş sütunlar için ikili günlüklerin Flink tarafından tüketilmesi

  • Tüketilen tablo kullanıcı için maskelenmişse, tüm modlarda ikili günlük tüketimi yasaktır.

  • Tüketilen tablo kullanıcı için maskelenmemişse, tüm modlarda ikili günlük tüketimine izin verilir.

  • V2.2.38 öncesi sürümlerde ve V3.0.1 ile V3.0.19 arası sürümlerde:

    • Sabit FE modu, maskelenmiş sütunların tüketilmesini desteklemez.

    • FE modu, maskelenmiş sütunların tüketilmesini destekler.

  • V3.0.19 ile V3.0.27 arası sürümlerde:

    Hem Sabit FE hem de FE modları ikili günlük tüketimini yasaklar. İkili günlükleri tüketmek için tüm tablolarda kullanıcı için veri maskelemeyi devre dışı bırakmanız gerekir.

    -- 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;
  • V3.0.28'den itibaren, tablo sonuçlarına maskeleme kuralları uygulamadıysanız ve veri maskelemeyle ilgili GUC parametreleri etkin olsa bile Sabit FE ve FE modlarında ikili günlükleri tüketebilirsiniz.

MaxCompute üzerinden maskelenmiş sütunların doğrudan okunması

MaxCompute'in maskelenmiş Hologres sütunlarını doğrudan okumasını yasaklar.

Okuma desteklenir. (Önerilmez)

Veri maskeleme sürümünü kontrol etme

SELECT hologres.get_hg_anon_version();

Önkoşullar

Veri maskelemeyi kullanmadan önce, bir superuser'ın veritabanı düzeyinde aşağıdaki komutları çalıştırması gerekir.

--Run as a superuser
CREATE EXTENSION IF NOT EXISTS hg_anon;  
ALTER DATABASE <current_db> SET hg_anon_enable = on;

Bu deyimleri çalıştırdıktan sonra, veri maskeleme davranışı Hologres örnek sürümünüz tarafından belirlenir. İş ihtiyaçlarınıza göre belirli bir davranışı manuel olarak da seçebilirsiniz:

  • V3.1 veya sonraki sürümlerdeki veri maskeleme davranışı beklentilerinizi karşılamıyorsa, aşağıdaki deyimi çalıştırarak V3.0 davranışına geri dönebilirsiniz:

    CALL hologres.set_hg_anon_version(1);
  • V3.0 ve önceki sürüm örnekleri set_hg_anon_version saklı yordamını desteklemez. Mevcut veri maskelemeye sahip bir örneği V3.1'e yükselttiyseniz, yeni V3.1 özelliklerini etkinleştirmek için aşağıdaki deyimi çalıştırabilirsiniz. Aksi takdirde sistem eski veri maskeleme davranışını korur.

    CALL hologres.set_hg_anon_version(2);
    Not
    • Deyim başarıyla çalışırsa, V3.1 ve sonraki sürümler için veri maskeleme davranışı etkinleştirilir.

    • Deyim yürütülemez ve hata günlüğünde "Error: not safe to upgrade to hg_anon version 2" görüntülenirse, özellik etkinleştirilememiş demektir. Bunun nedeni, mevcut veritabanında TEXT, VARCHAR veya CHAR dışındaki türlerdeki sütunlar için veri maskelemenin yapılandırılmış olmasıdır. V3.1 ve sonraki sürümlerde veri maskeleme sonuçları beklenen şekilde olmaz ve veri maskeleme davranışının düzeltilmesi gerekir.

Sınırlamalar

  • Maskeleme kuralları olan bir tablodan, maskeleme kurallarının tanımlanmadığı bir tabloya veri aktaramazsınız. Aşağıdaki hata döndürülür:

    ERROR: The insert table has not set SECURITY LABEL
  • Maskeleme kuralları olan tablolarda UNION veya DISTINCT sorguları çalıştıramazsınız. Aşağıdaki hata döndürülür:

    ERROR: UNION is not support on security item
  • Veri maskeleme, sorgu performansını etkileyebilir. Etki, maskeleme yöntemine ve veri hacmine bağlı olarak değişir. Performans %10 ila %20 oranında düşebilir ve aşırı durumlarda daha büyük ölçüde azalabilir.

  • Yabancı tablolar için maskeleme kuralları ayarlayamazsınız.

Veri maskeleme kullanma

Maskeleme kurallarını yapılandırma

Hologres, belirli sütunlar veya kullanıcılar için veri maskeleme kuralları belirlemenize olanak tanır. Maskeleme kurallarını yapılandırmadan önce, veri maskeleme GUC parametresini etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. Önkoşullar.

  • Sözdizimi

    • Bir sütun için maskeleme ilkesi ayarlama

      Birden çok sütundaki verileri maskelemek için bu deyimi her sütun için ayrı ayrı çalıştırmanız gerekir.

      SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value';
    • Bir kullanıcı için maskeleme ilkesi ayarlama

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

    Parametre

    Açıklama

    hg_anon

    hg_anon uzantısı veri maskeleme işlevselliği sağlar. SECURITY LABEL deyiminizde sağlayıcı olarak hg_anon belirtmeniz gerekir.

    tablename

    Maskeleme uygulanacak sütunu içeren tablonun adı.

    col_name

    Maskeleme uygulanacak sütunun adı.

    label_name

    Sistem tarafından önceden tanımlanmış anonimleştirme işlevleri için, mevcut veritabanında ayarlanan label_name değerini görüntülemek üzere SHOW hg_anon_labels; komutunu kullanabilirsiniz.

    user_name

    Hesap kimliği. Bu bilgiyi Security Settings sayfasında bulabilirsiniz.

    masked|unmasked

    • masked: Veri maskeleme kullanın.

    • unmasked: Veri maskeleme kullanmayın.

    Aşağıdaki tabloda önceden tanımlanmış label_name değerleri açıklanmaktadır.

    Veri türü

    label_name

    Maskeleme ilkesi

    Maskeleme türü

    Açıklama

    Örnek

    TEXT

    name

    name

    mask

    İsim maskeler.

    • Maskeleme öncesi: Li Hua; Maskeleme sonrası: * Hua.

    • Maskeleme öncesi: Wang Xiaoqiang; Maskeleme sonrası: ** Qiang.

    email

    email

    mask

    E-posta adresini maskeler.

    Maskeleme öncesi: lihuang@alibaba.com; Maskeleme sonrası: lih***@alibaba.com.

    ip

    ip

    mask

    IP adresini maskeler.

    Maskeleme öncesi: 1.2.3.4; Maskeleme sonrası: 1...*.

    id

    id

    mask

    Kimlik numarasını maskeler.

    Maskeleme öncesi: 110345188812011234; Maskeleme sonrası: 14.

    phone

    phone

    mask

    Telefon numarasını maskeler.

    Maskeleme öncesi: 13900001234; Maskeleme sonrası: ***1234.

    bank_id

    bank_id

    mask

    Banka veya kredi kartı numarasını maskeler.

    Maskeleme öncesi: 2349867902834701928; Maskeleme sonrası: *1928.

    hash

    md5

    hash

    MD5 algoritmasını kullanarak verileri maskeler.

    Maskeleme öncesi: Wenyi West Road, Hangzhou, Zhejiang; Maskeleme sonrası: dbf894b409d4a2ef17dfd9c7fdcafcd8.

    first_mask

    first_mask

    mask

    first_mask kuralı yalnızca ilk karakteri gösterir.

    Maskeleme öncesi: 123456789; Maskeleme sonrası: 1****.

    INT, FLOAT ve diğer sayısal türler

    Default

    default_value

    default_value

    Verileri varsayılan bir değerle maskeler.

    Not
    • Veri maskelemeyi yapılandırırken belirtilen label_name mevcut değilse, sistem yedek olarak varsayılan değer maskelemesini kullanır.

    • Yalnızca Hologres V3.1 ve sonraki sürümlerde desteklenir.

    Veri türleri ile bunların varsayılan maskelenmiş değerleri arasındaki eşlemeler:

    • 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: Geçerli saat

    • UUID: 00000000-0000-0000-0000-000000000000

Maskeleme kurallarını görüntüleme

  • Sütunlar için ayarlanan maskeleme kurallarını görüntülemek için:

    --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;
  • Kullanıcılar için ayarlanan maskeleme kurallarını görüntülemek için:

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

Maskeleme kurallarını özelleştirme

Mevcut veri maskeleme kuralları gereksinimlerinizi karşılamıyorsa, hg_anon_lables GUC parametresini değiştirerek özel kurallar oluşturabilirsiniz.

  • Sözdizimi

    -- 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>}, 
    ...  ]'; 

    ALTER DATABASE komutunu yürüttükten sonra mevcut bağlantı geçersiz hale gelir. Yeni bir bağlantı kurmanız gerekir. Ayarın etkili olup olmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz.

    SHOW hg_anon_enable;
  • Örnek

    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":""}}]';

    Parametreler:


    Öğe


    Açıklama


    Örnek sonuç


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


    IP adresini maskeler.


    192...*


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


    E-posta adresini maskeler.


    abc***@example.net


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


    İsmi maskeler.


    *Wu


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


    Karma işlevi kullanarak verileri maskeler.


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


    Dizenin başında veya sonunda belirtilen sayıda karakterin korunması gibi özel maskeleme desenlerine olanak tanır.


    Yok

Örnekler

Örnek veriler

Bir veri kaynağı hazırlayın. Kendi iş verilerinizi de kullanabilirsiniz.

--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');

Sütun maskeleme kuralını ayarlama

--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';

Yeni bir bağlantıda, maskelenmiş sonuçları görüntülemek için aşağıdaki komutu çalıştırın.

SELECT * FROM personal_basic_information;

Aşağıdaki sonuç döndürülür:

 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)

Sütun maskelemeyi kaldırma

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;

Sütunlar için maskeleme kurallarını kaldırdıktan sonraki sonucu görüntülemek için aşağıdaki komutu çalıştırın.

SELECT name,id FROM personal_basic_information;

Aşağıdaki sonuç döndürülür:

SELECT name,id FROM personal_basic_information;
  name  |         id         
--------+--------------------
 Li Si   | 510622198412248000
 Li Xiaoyao | 511025198812271696
 Zhang San   | 142732199104050022
(3 rows)

Kullanıcı maskelemeyi kaldırma

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

Kullanıcı için maskeleme kuralını kaldırdıktan sonraki sonucu görüntülemek için aşağıdaki komutu çalıştırın.

SELECT * FROM personal_basic_information;

Aşağıdaki sonuç döndürülür:

  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)

JOIN sütununda maskeleme ayarlama

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

Aşağıdaki sonuç döndürülür:

name | email | ip | id | phone | bank_id | id 
------+-------+----+----+-------+---------+----
(0 rows)

Data Security Guard Kullanma

Maskeleme kurallarını manuel olarak yapılandırmaya ek olarak, veri maskelemeyi otomatikleştirmek için Data Security Guard'ı da kullanabilirsiniz.

  • Sınırlamalar

    • Yalnızca Hologres V1.1 ve sonraki sürümler, veri maskeleme için Data Security Guard kullanımını destekler.

      Not

      Örnek sürümünüz V1.1'den önceyse, bkz. Yükseltme hazırlık hatalarını giderme veya destek için Hologres DingTalk grubuna katılın. Daha fazla bilgi için bkz. Daha fazla çevrimiçi desteği nasıl alabilirim?.

    • Hassas veri algılamaya olanak tanımak için Data Security Guard, kök hesap için verileri maskelemez.

    • Data Security Guard, her gün saat 09:00:00'da (UTC+8) veri örnekleyerek hassas verileri tanımlar ve bunları içeren sütunlar için maskeleme kuralları belirler.

    • Data Security Guard'ı kullanarak Hologres'teki verileri şu bölgelerde maskeleyebilirsiniz: Çin (Pekin), Çin (Zhangjiakou), Çin (Şanghay), Çin (Hangzhou), Çin (Shenzhen), Çin (Hong Kong), Singapur, Almanya (Frankfurt), Malezya (Kuala Lumpur), Endonezya (Cakarta) ve ABD (Silikon Vadisi).

  • Yöntem

    • Veri maskeleme özelliğini etkinleştirin.

      Veri maskeleme varsayılan olarak devre dışıdır. Bir superuser'ın hedef veritabanında bunu etkinleştirmek için aşağıdaki komutları çalıştırması gerekir.

      --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, veri maskelemeyi etkinleştirmek istediğiniz veritabanıdır.

      Önemli
      • hg_anon_enable bir GUC parametresidir. ALTER DATABASE komutunu çalıştırdıktan sonra değişiklik mevcut bağlantı için etkili olmaz.

      • Ayarın etkili olup olmadığını kontrol etmek için aşağıdaki SQL deyimini çalıştırabilirsiniz.

        SHOW hg_anon_enable;
    • Maskeleme için veritabanını yapılandırın.

      1. Data Security Guard konsolunda oturum açın. Daha fazla bilgi için bkz. Data Security Guard sayfasına gitme.

      2. Sol gezinme bölmesinde, Rule Configurations > Data Identification Rule seçeneklerine tıklayarak Data Identification Rule sayfasına gidin.

      3. Sensitive Data Identification sayfasında bir veri tanımlama kuralı oluşturun. Daha fazla bilgi için bkz. Veri tanımlama kuralları.

      4. Sol gezinme bölmesinde, Data Masking Management seçeneğine tıklayarak Data Masking Management sayfasına gidin.

      5. Masking Scenario açılır listesinden Hologres display masking (hologres_display_desense_code) seçeneğini belirleyin ve ardından sağ taraftaki Select Database for Masking seçeneğine tıklayın.

      6. Authorize Account for Masking iletişim kutusunda, Unmasked Databases listesinden bir veritabanı seçin ve bunu Masked Databases listesine taşıyın. I agree to authorize Data Security Guard to mask this database onay kutusunu işaretleyin ve ardından OK seçeneğine tıklayın.

      7. Data Masking Management sayfasında, sağ üst köşedeki Create Masking Rule seçeneğine tıklayın. Daha fazla bilgi için bkz. Veri Maskeleme Yönetimi. Sistem ardından belirttiğiniz veritabanına maskeleme uygular.

SSS

Veriler maskelenmedi?

  • Belirti: Örnekteki adımları izlersiniz ancak sorgu sonuçları maskelenmez.

  • Olası nedenler:

    • Bazı kullanıcılar için maskelemeyi devre dışı bırakan bir kural ayarlanmış.

    • Maskeleme etiketleri yapılandırılmamış.

  • Çözüm:

    • Kullanıcıya özel maskelemeyi kaldırma kurallarını kontrol etmek için aşağıdaki SQL komutunu çalıştırın.

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

      Varsayılan olarak bu sorgu boş bir sonuç döndürür; bu, veri maskelemenin tüm kullanıcılar için geçerli olduğu anlamına gelir. Sonuç boş değilse, listelenen kullanıcılar için maskelemeyi etkinleştirmeniz gerekir.

    • Yapılandırılan maskeleme etiketlerini kontrol etmek için aşağıdaki SQL deyimini çalıştırın.

      SHOW hg_anon_labels;

      Sonuçta ip gibi etiketler yer almıyorsa, bunları ayarlamak için aşağıdaki SQL komutunu çalıştırın.

      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}}
      ]';

      Bu etiketlere karşılık gelen kurallar hakkında daha fazla bilgi için bkz. Önceden tanımlanmış label_name değerleri.