Dinamik veri maskeleme

Şunlar için geçerlidir:Azure SQL Veritabanı Azure SQL Yönetilen Örneği Azure Synapse Analytics (yalnızca ayrılmış SQL havuzları)

Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Azure Synapse Analytics dinamik veri maskeleme desteği sağlar. Dinamik veri maskeleme, hassas verilerin görünürlüğünü ayrıcalık sahibi olmayan kullanıcılardan gizler.

Dinamik veri maskeleme, müşterilerin hassas verilerin ne kadarının ortaya çıkarıldığını uygulama katmanı üzerinde en az etkiyle belirlemesini sağlayarak hassas verilere yetkisiz erişimi önlemeye yardımcı olur. Bu, belirlenen veritabanı alanları üzerinde sorgunun sonuç kümesindeki hassas verileri gizleyen, ancak veritabanındaki veriler değiştirilmeyen ilke tabanlı bir güvenlik özelliğidir.

Örneğin, bir çağrı merkezindeki hizmet temsilcisi, e-posta adresinin birkaç karakterini onaylayarak arayan kişi tanımlayabilir, ancak e-posta adresinin tamamı hizmet temsilcisine açıklanmamalıdır. Herhangi bir sorgunun sonuç kümesindeki tüm e-posta adreslerini maskeleyen bir maskeleme kuralı tanımlanabilir. Başka bir örnek olarak, bir geliştiricinin uyumluluk düzenlemelerini ihlal etmeden sorun giderme amacıyla üretim ortamlarını sorgulaması için kişisel verileri korumak için uygun bir veri maskesi tanımlanabilir.

Dinamik veri maskeleme temelleri

Azure portalında, SQL Veritabanı yapılandırma bölmenizdeki Güvenlik'in altındaki Dinamik Veri Maskeleme bölmesini seçerek dinamik veri maskeleme ilkesi ayarlarsınız. Bu özellik SQL Yönetilen Örneği için portal kullanılarak ayarlanamaz. Daha fazla bilgi için bkz . Dinamik Veri Maskeleme.

Dinamik veri maskeleme ilkesi

  • Maskelemenin dışında tutulan SQL kullanıcıları: SQL sorgusu sonuçlarında maskelenmemiş veriler alan Microsoft Entra Id (eski adı Azure Active Directory) kimliklerini içerebilen BIR DIZI SQL kullanıcısı. Sunucu yöneticisi, Microsoft Entra yöneticisi ve db_owner rolü gibi yönetici haklarına sahip kullanıcılar özgün verileri maske olmadan görüntüleyebilir. (Not: SQL Server'daki sysadmin rolü için de geçerlidir)
  • Maskeleme kuralları: Maskelenecek belirlenen alanları ve kullanılan maskeleme işlevini tanımlayan bir kural kümesi. Ayrılan alanlar veritabanı şeması adı, tablo adı ve sütun adı kullanılarak tanımlanır.
  • Maskeleme işlevleri: Farklı senaryolar için verilerin açığa çıkışının denetlendiği bir yöntem kümesi.
Maskeleme işlevi Maskeleme mantığı
Varsayılan Belirlenen alanların veri türlerine göre tam maskeleme

* Alanın boyutu dize veri türleri için 4 karakterden azsa (veya daha az) kullanın XXXX (nchar, ntext, nvarchar).
* Sayısal veri türleri için sıfır değeri kullanın (bigint, bit, ondalık, int, para, sayısal, smallint, smallmoney, tinyint, float, real).
* Tarih/saat veri türleri (date, datetime2, datetime, datetimeoffset, smalldatetime, time) için kullanın1900-01-01.
* sql_variant için geçerli türün varsayılan değeri kullanılır.
* XML için belge <masked /> kullanılır.
* Özel veri türleri (zaman damgası, tablo, HierarchyID, uniqueidentifier, ikili, görüntü, varbinary ve uzamsal türler) için boş bir değer kullanın.
Kredi kartı Belirlenen alanların son dört basamağını kullanıma sunan ve kredi kartı biçiminde ön ek olarak sabit bir dize ekleyen maskeleme yöntemi.

XXXX-XXXX-XXXX-1234
E-posta İlk harfi kullanıma sunan ve e-posta adresi biçiminde sabit bir dize ön eki kullanarak etki alanını XXX.com ile değiştiren maskeleme yöntemi.

aXX@XXXX.com
Rastgele sayı Seçilen sınırlara ve gerçek veri türlerine göre rastgele bir sayı oluşturan maskeleme yöntemi. Belirlenen sınırlar eşitse maskeleme işlevi sabit bir sayıdır.

Rastgele bir sayı oluşturmak için maskeleme yöntemini gösteren ekran görüntüsü.
Özel metin İlk ve son karakterleri kullanıma sunan ve ortaya özel bir doldurma dizesi ekleyen maskeleme yöntemi. Özgün dize, kullanıma sunulan ön ekten ve son ekten daha kısaysa, yalnızca doldurma dizesi kullanılır.

prefix[padding]suffix

Gezinti bölmesinin ekran görüntüsü.

DDM öneri altyapısı, veritabanınızdaki belirli alanları hassas olabilecek alanlar olarak işaretleyerek maskeleme için iyi adaylar olabilir. Portaldaki Dinamik Veri Maskeleme bölmesinde veritabanınız için önerilen sütunları görürsünüz. Bir veya daha fazla sütun için Maske Ekle'yi seçin, ardından uygun maskeleme işlevini seçin ve kaydet'i seçerek bu alanlara maske uygulayın.

T-SQL kullanarak dinamik veri maskelemesini yönetme

PowerShell cmdlet'lerini kullanarak veritabanınız için dinamik veri maskeleme ayarlama

Veri maskeleme ilkeleri

Veri maskeleme kuralları

REST API kullanarak veritabanınız için dinamik veri maskeleme ayarlama

Veri maskeleme ilkesini ve kurallarını program aracılığıyla yönetmek için REST API'yi kullanabilirsiniz. Yayımlanan REST API aşağıdaki işlemleri destekler:

Veri maskeleme ilkeleri

Veri maskeleme kuralları

İzinler

Dinamik veri maskeleme yapılandırması için yerleşik roller şunlardır:

Dinamik veri maskeleme kullanmak için gerekli eylemler şunlardır:

Okuma/Yazma:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/*

Okuma:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/read

Yazmak:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/write

T-SQL komutuyla dinamik veri maskeleme kullanırken izinler hakkında daha fazla bilgi edinmek için bkz . İzinler

Ayrıntılı izin örneği

Hassas verilere yetkisiz erişimi engelleyin ve veritabanının farklı düzeylerinde yetkisiz bir kullanıcıya maskeleyerek denetimi elde edin. UnMASK izinlerini veritabanı düzeyinde, şema düzeyinde, tablo düzeyinde veya sütun düzeyinde herhangi bir veritabanı kullanıcısına veya rolüne verebilir veya iptal edebilirsiniz. Microsoft Entra kimlik doğrulaması ile birlikte, Azure ortamınızda tutulan kullanıcılar, gruplar ve uygulamalar için UNMASK izinleri yönetilebilir. UNMASK izni, veritabanında depolanan verilere yetkisiz erişimi denetlemek ve sınırlamak ve veri güvenliği yönetimini geliştirmek için ayrıntılı bir yol sağlar.

  1. Kullanıcı tablolarını içerecek şema oluşturma:

    CREATE SCHEMA Data;
    GO
    
  2. Maskelenmiş sütunlarla tablo oluşturma:

    CREATE TABLE Data.Membership (
        MemberID INT IDENTITY(1, 1) NOT NULL,
        FirstName VARCHAR(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
        LastName VARCHAR(100) NOT NULL,
        Phone VARCHAR(12) MASKED WITH (FUNCTION = 'default()') NULL,
        Email VARCHAR(100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
        DiscountCode SMALLINT MASKED WITH (FUNCTION = 'random(1, 100)') NULL,
        BirthDay DATETIME MASKED WITH (FUNCTION = 'default()') NULL
    );
    
  3. Örnek veri ekleme:

    INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay)
    VALUES
    ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'),
    ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5, '1990-05-14 11:30:00'),
    ('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50, '2004-02-29 14:20:10'),
    ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40, '1990-03-01 06:00:00');
    
  4. Hizmet tablolarını içerecek şema oluşturma:

    CREATE SCHEMA Service;
    GO
    
  5. Maskelenmiş sütunlarla hizmet tablosu oluşturma:

    CREATE TABLE Service.Feedback (
        MemberID INT IDENTITY(1, 1) NOT NULL,
        Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL,
        Rating INT MASKED WITH (FUNCTION = 'default()'),
        Received_On DATETIME
    );
    
  6. Örnek veri ekleme:

    INSERT INTO Service.Feedback (Feedback, Rating, Received_On)
    VALUES
        ('Good', 4, '2022-01-25 11:25:05'),
        ('Excellent', 5, '2021-12-22 08:10:07'),
        ('Average', 3, '2021-09-15 09:00:00');
    
  7. Veritabanında farklı kullanıcılar oluşturun:

    CREATE USER ServiceAttendant WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceLead WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceManager WITHOUT LOGIN;
    GO
    
    CREATE USER ServiceHead WITHOUT LOGIN;
    GO
    
  8. Veritabanındaki kullanıcılara okuma izinleri verin:

    ALTER ROLE db_datareader ADD MEMBER ServiceAttendant;
    
    ALTER ROLE db_datareader ADD MEMBER ServiceLead;
    
    ALTER ROLE db_datareader ADD MEMBER ServiceManager;
    
    ALTER ROLE db_datareader ADD MEMBER ServiceHead;
    
  9. Kullanıcılara farklı UNMASK izinleri verin:

    --Grant column level UNMASK permission to ServiceAttendant
    GRANT UNMASK ON Data.Membership(FirstName) TO ServiceAttendant;
    
    -- Grant table level UNMASK permission to ServiceLead
    GRANT UNMASK ON Data.Membership TO ServiceLead;
    
    -- Grant schema level UNMASK permission to ServiceManager
    GRANT UNMASK ON SCHEMA::Data TO ServiceManager;
    GRANT UNMASK ON SCHEMA::Service TO ServiceManager;
    
    --Grant database level UNMASK permission to ServiceHead;
    GRANT UNMASK TO ServiceHead;
    
  10. Kullanıcı ServiceAttendantbağlamı altındaki verileri sorgula:

    EXECUTE AS USER = 'ServiceAttendant';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  11. Kullanıcı ServiceLeadbağlamı altındaki verileri sorgula:

    EXECUTE AS USER = 'ServiceLead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  12. Kullanıcı ServiceManagerbağlamı altındaki verileri sorgula:

    EXECUTE AS USER = 'ServiceManager';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  13. Verileri kullanıcı bağlamı altında sorgulama ServiceHead

    EXECUTE AS USER = 'ServiceHead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  14. UNMASK izinlerini iptal etmek için aşağıdaki T-SQL deyimlerini kullanın:

    REVOKE UNMASK ON Data.Membership(FirstName) FROM ServiceAttendant;
    
    REVOKE UNMASK ON Data.Membership FROM ServiceLead;
    
    REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager;
    
    REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager;
    
    REVOKE UNMASK FROM ServiceHead;