Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Dinamik veri maskeleme

Son Güncelleme:Oct 04, 2026

MaxCompute projesindeki belirli kullanıcıların hassas verileri görüntülemesine izin verirken önemli bilgileri gizlemek için dinamik veri maskelemeyi etkinleştirin. Bu özellik, veri sızıntılarını önlemek amacıyla verilere erişim sırasında hassas verileri gerçek zamanlı olarak gizler veya değiştirir. Bu konuda MaxCompute'de dinamik veri maskeleme özelliğinin nasıl etkinleştirileceği açıklanır ve kullanım örnekleri sunulur.

Giriş

MaxCompute; geliştirme, test, veri paylaşımı ve operasyonlar gibi senaryolarda kişisel tanımlayıcı bilgiler (PII) dahil olmak üzere hassas verileri korumak için dinamik veri maskeleme sunar. Kullanıcıların erişemedikleri sütunları dışlamak için sorgularını değiştirmelerini gerektiren sütun düzeyindeki erişim kontrol listelerinden (ACL'ler) farklı olarak dinamik veri maskeleme mevcut sorguları değiştirmeden otomatik olarak çalışır. Bir kullanıcı verilere eriştiğinde sistem kullanıcıya veya rolüne göre uygun maskeleme ilkesini otomatik olarak uygular. Bu sayede veriler sorgulama, indirme, birleştirme ve kullanıcı tanımlı işlev (UDF) hesaplamaları sırasında maskelenir ve hassas verilerin açığa çıkma riski azaltılır.

Maskeleme ilkeleri; kimlik numaraları, banka kartı numaraları, adresler ve telefon numaraları gibi verileri korumak için maskeleme, karma (hashing), karakter değiştirme, sayısal yuvarlama ve tarih kısaltma gibi çeşitli yöntemleri destekler. MaxCompute veri maskelemeyi depolamadan veri alma işleminin en erken aşamasında uygular. Bu yaklaşım yüksek performans ve güvenlik sağlar.

image

Kullanım notları

  • Desteklenen bölgeler

    Bu özellik genel önizleme aşamasındadır ve yalnızca aşağıdaki bölgelerde kullanılabilir: Çin (Hangzhou), Çin (Şanghay), Çin (Pekin), Çin (Zhangjiakou), Çin (Ulanqab), Çin (Shenzhen), Çin (Chengdu), Çin (Hong Kong), Japonya (Tokyo), Singapur, Malezya (Kuala Lumpur), Endonezya (Cakarta), Almanya (Frankfurt), ABD (Silikon Vadisi) ve ABD (Virginia).

  • Desteklenen sürücü sürümleri


    Bağlantı yöntemi


    Minimum sürüm


    Maskeleme desteği


    Java SDK


    0.48.0-public veya üzeri


    Desteklenir


    odpscmd


    0.47.1 veya üzeri


    Desteklenir


    JDBC


    3.4.3 veya üzeri


    Desteklenir


    MaxFrame


    Tüm sürümler


    Desteklenir


    PyODPS


    Tüm sürümler


    Desteklenir


    Go SDK


    Tüm sürümler


    Desteklenir

  • Dahili ve harici tablolar

    • Maskeleme ilkeleri hem MaxCompute dahili hem de harici tablolar için desteklenir.

    • Dinamik veri maskeleme ve satır düzeyi izinler birbirini dışlar. Zaten bir maskeleme ilkesi olan bir tablo için satır düzeyi izinler yapılandıramazsınız ve bunun tersi de geçerlidir.

    • Çince karakterlere bir maskeleme ilkesi uygularken karakter kodlaması UTF-8 olmalıdır.

  • Görünümler

    • Standart görünümler maskeleme ilkelerini destekler. Bir görünümdeki ilkeler kaynak tablodaki ilkelerle eş zamanlanır. Kaynak tabloya bir maskeleme ilkesi bağlandığında veya bağlantısı kaldırıldığında değişiklik görünümde hemen etkili olur.

    • Materyalize edilmiş bir görünüm oluşturma anında kaynak tablosundan maskeleme ilkelerini devralır. Kaynak tablonun ilkelerinde sonraki değişiklikler materyalize edilmiş görünümü etkilemez.

  • Maskeleme ilkeleri

    Bir kullanıcıya birden fazla maskeleme ilkesi uygulanırsa en yüksek önceliğe sahip olan kullanılır. Daha fazla bilgi için bkz. İlke öncelikleri.

Nasıl çalışır

Proje sahibi veya Super_Administrator ya da Admin rolüne sahip kullanıcılar maskeleme ilkelerini yönetebilir. Bir kullanıcı hassas veri içeren bir tabloya eriştiğinde sistem kullanıcıyla veya rolüyle ilişkili maskeleme ilkelerini kontrol eder ve buna göre maskelenmiş veriyi veya düz metin veriyi döndürür.

image

Maskeleme izinleri

Yalnızca proje sahibi veya proje düzeyinde Super_Administrator ya da Admin rolü verilen kullanıcılar bir proje için dinamik veri maskeleme özelliğini etkinleştirebilir veya devre dışı bırakabilir.

Bir tablo için maskeleme ilkelerini yönetmek için gereken izinler aşağıdaki gibidir:

  • Varsayılan olarak proje sahibi veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip kullanıcılar gerekli izinlere sahiptir.

  • Özel bir yönetim projesi rolü kullanarak bir RAM Kullanıcısına veya RAM Rolüne izinler de verebilirsiniz. MaxCompute konsolu üzerinde oturum açın. Sol gezinme bölmesinde şuraya gidin: Manage Configurations > Projects. Projenizin yönetim sayfasında Project Settings sayfasına gidin ve Role Permissions sekmesini seçin. MaxCompute izinlerine sahip bir proje rolü oluşturmak için Create Project-level Role öğesini tıklayın. Role Type değerini Admin (management role) olarak ayarlayın ve aşağıdaki örneğe benzer bir ilke ifadesi kullanın:

     {
      "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/*"
          ]
        }
      ]
    }

Komutlar

Veri maskelemeyi etkinleştirin veya devre dışı bırakın

Veri maskeleme anahtarı odps.data.masking.policy.enable proje düzeyinde bir özelliktir. Bu özelliği yalnızca proje sahibi veya proje düzeyinde Super_Administrator ya da Admin rolü verilen kullanıcılar yapılandırabilir. Daha fazla bilgi için bkz. Yerleşik rolleri yönetin.

Veri maskelemeyi etkinleştirdikten veya devre dışı bıraktıktan sonra önbellek yenileme gecikmesi nedeniyle değişikliğin etkili olması yaklaşık 15 dakika sürer.

  • Proje için dinamik veri maskelemeyi etkinleştirin.

    setproject odps.data.masking.policy.enable=true;
  • Proje için dinamik veri maskelemeyi devre dışı bırakın.

    setproject odps.data.masking.policy.enable=false;

Maskeleme ilkeleri oluşturun ve silin

Bir projede en fazla 1.000 maskeleme ilkesi bulunabilir.

  • Sözdizimi

    • Maskeleme ilkesi oluşturun.

      CREATE DATA MASKING POLICY [IF NOT EXISTS] <policy_name> 
      TO { USER <user_list> | ROLE <role_list> | default } 
      USING <Predefined Masking Policy>;
    • Maskeleme ilkesini silin.

      DROP DATA MASKING POLICY <policy_name>;
  • Parametreler

    Parametre

    Gerekli

    Açıklama

    policy_name

    Evet

    Maskeleme ilkesinin adıdır. İlke adı büyük/küçük harfe duyarlı değildir ve yalnızca harflerden (a–z, A–Z), rakamlardan (0–9) ve alt çizgiden (_) oluşabilir. Adın bir harfle başlamasını öneririz. Ad en fazla 128 bayt uzunluğunda olabilir.

    USER | ROLE | default

    Evet

    Aşağıdaki seçeneklerden birini seçin:

    • USER: İlkeyi belirli kullanıcılara uygular. <user_list> içinde kullanıcı adlarını belirtin. Kullanıcı bilgilerini görüntülemek için list users; komutunu çalıştırabilirsiniz.

    • ROLE: İlkeyi belirli rollere uygular. <role_list> içinde rol adlarını belirtin. Rol bilgilerini görüntülemek için list roles; komutunu çalıştırabilirsiniz.

    • default: İlkeyi varsayılan olarak uygular. Bir kullanıcıya veya role başka bir maskeleme ilkesi eşleşmiyorsa varsayılan ilke uygulanır.

    Predefined Masking Policy

    Evet

    Önceden tanımlanmış bir maskeleme ilkesidir. Daha fazla bilgi için bkz. Önceden tanımlanmış maskeleme ilkeleri.

  • Örnekler

    • Örnek 1: userA, userB ve userC için bir MD5 karma ilkesi oluşturun.

      CREATE data masking policy IF NOT EXISTS masking_test_001
      TO USER (userA, userB, userC)
      USING MASKED_MD5(0);
    • Örnek 2: Bir projenin geliştirme ve operasyon rolleri için bir MD5 karma ilkesi oluşturun.

      CREATE data masking policy IF NOT EXISTS masking_test_001
      TO ROLE (role_project_deploy, role_project_dev)
      USING MASKED_MD5(0);

İlkeleri sütunlara uygulayın

  • Sözdizimi

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

    Parametre

    Gerekli

    Açıklama

    policy_name

    Evet

    Maskeleme ilkesinin adıdır.

    table_name

    Evet

    Hassas veri içeren tablonun adıdır.

    column_name

    Evet

    Hassas veri içeren sütunun adıdır.

Maskeleme ilkelerini görüntüleyin

  • Sözdizimi

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

    Parametre

    Gerekli

    Açıklama

    policy_name

    Evet

    Maskeleme ilkesinin adıdır.

    table_name

    Evet

    Hassas veri içeren tablonun adıdır.

    column_name

    Evet

    Hassas veri içeren sütunun adıdır.

    user_name

    Evet

    Kullanıcı adıdır.

    role_name

    Evet

    Rol adıdır.

Önceden tanımlanmış maskeleme ilkeleri

Önceden tanımlanmış maskeleme ilkeleri; maskeleme, karma (hashing), karakter değiştirme ve yuvarlama gibi yöntemleri içerir. Veri türüne ve koruma gereksinimlerinize göre bir ilke seçin.

İlke türü

İlke adı

Sözdizimi

Açıklama

Genel

Maskeleme yok

UNMASKED

Verileri düz metin olarak döndürür.

Desteklenen veri türleri: Tümü.

Null yapma

MASKED_NULLIFY

Verileri NULL ile değiştirir.

  • Desteklenen veri türleri: Tümü.

  • Örnek

    -- Before masking (data type: STRING)
    +-----------------+
    | col_string      |
    +-----------------+
    | Michael Johnson |
    +-----------------+
    
    -- Masking policy
    MASKED_NULLIFY
    
    -- After masking
    +------------+
    | col_string | 
    +------------+
    | NULL       | 
    +------------+

Varsayılan değer

MASKED_DV

Değeri karşılık gelen veri türünün varsayılan değeriyle değiştirir. Daha fazla bilgi için bkz. MASKED_DV için varsayılan değerler.

  • Desteklenen veri türleri: Tümü.

  • Örnek

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

Tarih kısaltma

MASKED_DATE_YEAR

Bir zaman değerinin yalnızca yıl kısmını korur ve ayı, günü ve saati o yılın başlangıcına (1 Ocak, 00:00:00 UTC) sıfırlar.

  • Desteklenen veri türleri: DATE, DATETIME, TIMESTAMP_NTZ ve TIMESTAMP.

  • Örnek

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

Yuvarlama

MASKED_POINT_RESERVE(<num>)

Bir sayıyı 0 ile 5 arasında belirtilen ondalık basamak sayısına yuvarlar.

  • num: Korunacak ondalık basamak sayısıdır. Değer 0 ile 5 arasında bir tamsayı olmalıdır.

  • Desteklenen veri türleri: DECIMAL, FLOAT ve DOUBLE.

  • Örnek

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

Maskeleme

Başlangıç ve sonu maskeleme

MASKED_STRING_MASKED_BA(<before>, <after>)

Bir dizenin başlangıcını ve sonunu yıldız işaretleriyle (*) maskeler ve orta kısmı düz metin olarak görüntüler.

  • before: Dizenin başlangıcı * ile değiştirilir. before parametresi maske uzunluğunu belirtir ve 0'dan büyük veya eşit bir tamsayı olmalıdır. before 0 ise dizenin başlangıcı maskelenmez.

  • after: Dizenin sonu * ile değiştirilir. Maske uzunluğu after parametresi tarafından belirtilir ve bu parametre 0'dan büyük veya eşit bir tamsayı olmalıdır.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

    -- 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*** | 
        +-----------------+

Ortayı maskeleme

MASKED_STRING_UNMASKED_BA(<before>, <after>)

Bir dizenin başlangıcını ve sonunu düz metin olarak görüntüler ve orta kısmı yıldız işaretleriyle (*) maskeler.

  • before: Dizenin başlangıcında düz metin olarak görüntülenecek karakter sayısıdır. Değer 0'dan büyük veya eşit bir tamsayı olmalıdır.

  • after: Dizenin sonunda düz metin olarak görüntülenecek karakter sayısıdır. Değer 0'dan büyük veya eşit bir tamsayı olmalıdır.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

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

Karma (Hashing)

SHA-256 karma

MASKED_SHA256(<salt>)

Verileri SHA-256 karma algoritmasını kullanarak maskeler.

  • salt: Tuzdur. Değer 0 ile 9 arasında bir tamsayı olmalıdır.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

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

SHA-512 karma

MASKED_SHA512(<salt>)

Verileri SHA-512 karma algoritmasını kullanarak maskeler.

  • salt: Tuzdur. Değer 0 ile 9 arasında bir tamsayı olmalıdır.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

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

MD5 karma

MASKED_MD5(<salt>)

Verileri MD5 karma algoritmasını kullanarak maskeler.

  • salt: Tuzdur. Değer 0 ile 9 arasında bir tamsayı olmalıdır.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

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

SM3 karma

MASKED_SM3(<salt>)

Verileri SM3 karma algoritmasını kullanarak maskeler.

  • salt: Tuzdur. Değer 0 ile 9 arasında bir tamsayı olmalıdır.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

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

Karakter değiştirme

Rastgele değiştirme

MASKED_REPLACE_RANDOM(<position>)

Verileri rakamlar ve harfler dahil olmak üzere rastgele karakterlerle değiştirir. Dizenin uzunluğu değişmez.

  • position: Değiştirmenin nereden başlayacağını belirten bir tamsayıdır.

    • position = 0 ise dizenin tamamı rastgele karakterlerle değiştirilir.

    • position > 0 ise ilk position karakter rastgele karakterlerle değiştirilir.

    • position < 0 ise son N karakter değiştirilir; burada N, position değerinin mutlak değeridir.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

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

Başlangıç ve sonda rastgele değiştirme

MASKED_REPLACE_RANDOM_BA(<before>, <after>)

Bir dizenin başlangıcını ve sonunu rakamlar ve harfler dahil olmak üzere rastgele karakterlerle değiştirir. Dizenin uzunluğu değişmez.

  • before: Dizenin başlangıcında değiştirilecek karakter sayısıdır. Değer 0'dan büyük veya eşit bir tamsayı olmalıdır. Değer 0 ise başlangıçta hiçbir karakter değiştirilmez.

  • after: Dizenin sonunda değiştirilecek karakter sayısıdır. Değer 0'dan büyük veya eşit bir tamsayı olmalıdır.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

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

Sabit değiştirme

MASKED_REPLACE_FIXED(<position>, <fixed_string>)

  • Verileri sabit bir dizeyle değiştirir.

  • position: Değiştirmenin nerede gerçekleşeceğini belirten bir tamsayıdır.

    • position = 0 ise dizenin tamamı fixed_string ile değiştirilir.

    • position > 0 ise ilk position karakter fixed_string ile değiştirilir.

    • position < 0 ise son N karakter fixed_string ile değiştirilir; burada N, position değerinin mutlak değeridir.

  • fixed_string: Değiştirme dizesidir. En fazla 100 karakter uzunluğunda olabilir ve boşluk içeremez.

  • Desteklenen veri türleri: STRING, VARCHAR, CHAR ve BINARY.

  • Örnek

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

Örnekler

Hassas kişisel bilgileri maskeleyin

Bu örnekte hassas kişisel bilgileri maskelemek için maskeleme ilkelerinin nasıl yapılandırılacağı gösterilir.

  1. Verileri hazırlayın.

    Kişisel bilgileri depolamak için bir tablo oluşturun ve hassas verileri ekleyin.

    -- 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. Maskeleme ilkelerini yapılandırın.

    • Adlar için yalnızca ilk karakteri koruyun ve geri kalanını yıldız işaretleriyle (*) değiştirin.

      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;
    • Boy değerlerini en yakın tam sayıya yuvarlayın.

      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;
    • Doğum tarihleri için yalnızca yılı koruyun.

      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;
    • Varsayılan kullanıcılar için telefon numaralarını SM3 algoritmasını kullanarak karma hale getirin.

      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. Maskeleme ilkelerine tabi bir hesap kullanarak verileri sorgulayın.

    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=    | 
    +------------+------------+------------+------------+------------------------------------------------+

Varsayılan maskeleme

Bu örnekte bir kullanıcı veya rol birden fazla maskeleme ilkesiyle eşleştiğinde ilke önceliğinin nasıl çalıştığı gösterilir.

MASKED_SHA256(5) ilkesini varsayılan kullanıcılara uygulayın.

CREATE DATA MASKING POLICY default_hash_policy
TO DEFAULT
USING MASKED_SHA256(5);

UNMASKED ilkesini belirli A ve B kullanıcılarına uygulayın.

CREATE DATA MASKING POLICY ab_unmask_policy
TO USER (A, B)
USING UNMASKED;

Sonuç: A ve B kullanıcıları düz metin verilere erişebilir. Diğer kullanıcılar yalnızca SHA-256 ile karma hale getirilmiş verilere erişebilir.

Not

A ve B kullanıcıları hem MASKED_SHA256(5) hem de UNMASKED ilkeleriyle eşleşir. Sistem daha yüksek önceliğe sahip olduğu için UNMASKED ilkesini uygular. Daha fazla bilgi için bkz. İlke öncelikleri. Diğer kullanıcılar yalnızca MASKED_SHA256(5) ilkesiyle eşleşir.

Ek

İlke öncelikleri

Bir kullanıcıya birden fazla maskeleme ilkesi uygulandığında en yüksek önceliğe sahip olan kullanılır.

Örneğin A adlı bir kullanıcı col_string sütununa erişir ve iki maskeleme ilkesiyle eşleşir: 3 öncelik düzeyine sahip MASKED_REPLACE_RANDOM(3) ve 4 öncelik düzeyine sahip MASKED_SM3. Daha düşük sayı daha yüksek öncelik anlamına geldiğinden MASKED_REPLACE_RANDOM(3) ilkesi uygulanır. A kullanıcısı verileri rastgele karakterlerle maskelenmiş olarak görür.

Öncelik

Maskeleme ilkesi

0 (En Yüksek)

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 (En Düşük)

MASKED_NULLIFY

MASKED_DV için varsayılan değerler


Tür


Varsayılan


BIGINT


0


DOUBLE


0.0


DECIMAL


0


STRING


"" (boş dize)


DATETIME


DATETIME '1970-01-01 00:00:00' (UTC)


BOOLEAN


false


TINYINT


0


SMALLINT


0


INT


0


BINARY


'' (boş ikili dize)


FLOAT


0.0


DOUBLE


0.0


DECIMAL


0


VARCHAR(n)


"" (boş dize)


CHAR(n)


" " (n adet boşluk)


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


Boş bir dizi.


MAP


Boş bir harita.


JSON


"" (boş dize)


STRUCT


(alan türlerinin varsayılan değerleri)