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.

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.

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: . 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çinlist 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çinlist 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.
| |
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.
| |
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.
| |
Yuvarlama | MASKED_POINT_RESERVE(<num>) | Bir sayıyı 0 ile 5 arasında belirtilen ondalık basamak sayısına yuvarlar.
| |
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 (
|
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 (
| |
Karma (Hashing) | SHA-256 karma | MASKED_SHA256(<salt>) | Verileri SHA-256 karma algoritmasını kullanarak maskeler.
|
SHA-512 karma | MASKED_SHA512(<salt>) | Verileri SHA-512 karma algoritmasını kullanarak maskeler.
| |
MD5 karma | MASKED_MD5(<salt>) | Verileri MD5 karma algoritmasını kullanarak maskeler.
| |
SM3 karma | MASKED_SM3(<salt>) | Verileri SM3 karma algoritmasını kullanarak maskeler.
| |
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.
|
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.
| |
Sabit değiştirme | MASKED_REPLACE_FIXED(<position>, <fixed_string>) |
|
Ö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.
-
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); -
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;
-
-
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.
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|