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. |
|
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 |
|
|
|
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_versionsaklı 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);NotDeyim 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
UNIONveyaDISTINCTsorguları ç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_namedeğerini görüntülemek üzereSHOW 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_namedeğ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_maskkuralı 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_namemevcut 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 DATABASEkomutunu 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.
Önemlihg_anon_enablebir 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.
Data Security Guard konsolunda oturum açın. Daha fazla bilgi için bkz. Data Security Guard sayfasına gitme.
Sol gezinme bölmesinde, seçeneklerine tıklayarak Data Identification Rule sayfasına gidin.
Sensitive Data Identification sayfasında bir veri tanımlama kuralı oluşturun. Daha fazla bilgi için bkz. Veri tanımlama kuralları.
Sol gezinme bölmesinde, Data Masking Management seçeneğine tıklayarak Data Masking Management sayfasına gidin.
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.
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.
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
ipgibi 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.
-