Dynamické maskování dat

Platí pro:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (pouze vyhrazené fondy SQL)

Azure SQL Database, Azure SQL Managed Instance a Azure Synapse Analytics podporují dynamické maskování dat. Dynamické maskování dat omezuje přístup k citlivým datům pomocí jejich maskování pro neprivilegované uživatele.

Dynamické maskování dat pomáhá zabránit neoprávněnému přístupu k citlivým datům tím, že zákazníkům umožní určit, kolik citlivých dat se má odhalit s minimálním účinkem na aplikační vrstvu. Je to funkce zabezpečení založená na zásadách, která skryje citlivá data v sadě výsledků dotazu nad určenými databázovými poli, zatímco data v databázi se nemění.

Například zástupce služby v call centru může volajícího identifikovat potvrzením několika znaků jejich e-mailové adresy, ale úplná e-mailová adresa by neměla být odhalena zástupci služby. Pravidlo maskování lze definovat, které maskuje všechny e-mailové adresy v sadě výsledků libovolného dotazu. Jako další příklad je možné definovat odpovídající masku dat pro ochranu osobních údajů, aby vývojář mohl dotazovat produkční prostředí pro účely řešení potíží bez porušení předpisů dodržování předpisů.

Základy dynamického maskování dat

Zásady dynamického maskování dat nastavíte na webu Azure Portal výběrem podokna Dynamické maskování dat v části Zabezpečení v podokně konfigurace služby SQL Database. Tuto funkci nejde nastavit pomocí portálu pro službu SQL Managed Instance. Další informace naleznete v tématu Dynamické maskování dat.

Zásady dynamického maskování dat

  • Uživatelé SQL vyloučeni z maskování: Sada uživatelů SQL, která může zahrnovat identity z Microsoft Entra ID (dříve Azure Active Directory), které z výsledků dotazu SQL získávají nemaskovaná data. Uživatelé s právy správce, jako je správce serveru, správce Microsoft Entra a db_owner role, můžou zobrazit původní data bez jakékoli masky. (Poznámka: Platí také pro roli správce systému v SQL Serveru)
  • Pravidla maskování: Sada pravidel, která definují určená pole, která se mají maskovat, a použitou funkci maskování. Určená pole je možné definovat pomocí názvu schématu databáze, názvu tabulky a názvu sloupce.
  • Maskovací funkce: Sada metod, které řídí vystavení dat pro různé scénáře.
Maskování Logika maskování
Výchozí Úplné maskování podle datových typů určených polí

* Použijte XXXX (nebo méně), pokud je velikost pole menší než 4 znaky pro řetězcové datové typy (nchar, ntext, nvarchar).
* Použijte nulovou hodnotu pro číselné datové typy (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real).
* Slouží 1900-01-01 pro datové typy data a času (date, datetime2, datetime, datetimeoffset, smalldatetime, time).
* Pro sql_variant se použije výchozí hodnota aktuálního typu.
* Pro XML se <masked /> dokument používá.
* Použijte prázdnou hodnotu pro speciální datové typy (časové razítko, tabulka, HierarchyID, uniqueidentifier, binary, image, varbinary a prostorové typy).
Platební karta Metoda maskování, která zveřejňuje poslední čtyři číslice určených polí a přidá konstantní řetězec jako předponu ve formě platební karty.

XXXX-XXXX-XXXX-1234
Poslat e-mail Metoda maskování, která zveřejňuje první písmeno a nahrazuje doménu XXX.com pomocí předpony konstantního řetězce ve formě e-mailové adresy.

aXX@XXXX.com
Náhodné číslo Metoda maskování, která generuje náhodné číslo podle vybraných hranic a skutečných datových typů. Pokud jsou určené hranice stejné, je maskovací funkce konstantní číslo.

Screenshot that shows the masking method for generating a random number.
Vlastní text Metoda maskování, která zpřístupňuje první a poslední znaky a přidá doprostřed vlastní řetězec odsazení. Pokud je původní řetězec kratší než vystavená předpona a přípona, použije se pouze odsazení řetězce.

prefix[padding]suffix

Screenshot of the navigation pane.

Modul doporučení DDM označí určitá pole z vaší databáze jako potenciálně citlivá pole, která můžou být vhodnými kandidáty pro maskování. V podokně Dynamické maskování dat na portálu se zobrazí doporučené sloupce pro vaši databázi. Vyberte Přidat masku pro jeden nebo více sloupců, pak vyberte příslušnou funkci maskování a vyberte Uložit, aby se u těchto polí použila maska.

Správa dynamického maskování dat pomocí T-SQL

Nastavení dynamického maskování dat pro vaši databázi pomocí rutin PowerShellu

Zásady maskování dat

Pravidla maskování dat

Nastavení dynamického maskování dat pro vaši databázi pomocí rozhraní REST API

Rozhraní REST API můžete použít k programové správě zásad a pravidel maskování dat. Publikované rozhraní REST API podporuje následující operace:

Zásady maskování dat

Pravidla maskování dat

Oprávnění

Jedná se o předdefinované role pro konfiguraci dynamického maskování dat:

Toto jsou požadované akce pro použití dynamického maskování dat:

Čtení a zápis:

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

Čtení:

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

Zápis:

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

Další informace o oprávněních při použití dynamického maskování dat pomocí příkazu T-SQL najdete v tématu Oprávnění

Příklad podrobného oprávnění

Znemožnit neoprávněný přístup k citlivým datům a získat kontrolu tím, že ho maskuje neoprávněný uživatel na různých úrovních databáze. Oprávnění UNMASK můžete udělit nebo odvolat na úrovni databáze, na úrovni schématu, na úrovni tabulky nebo na úrovni sloupce libovolnému uživateli nebo roli databáze. V kombinaci s ověřováním Microsoft Entra je možné spravovat oprávnění UNMASK pro uživatele, skupiny a aplikace spravované v rámci vašeho prostředí Azure. Oprávnění UNMASK poskytuje podrobný způsob řízení a omezení neoprávněného přístupu k datům uloženým v databázi a zlepšení správy zabezpečení dat.

  1. Vytvořte schéma, které bude obsahovat uživatelské tabulky:

    CREATE SCHEMA Data;
    GO
    
  2. Vytvoření tabulky s maskovanými sloupci:

    CREATE TABLE Data.Membership (
        MemberID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED,
        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. Vložení ukázkových dat:

    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. Vytvořte schéma, které bude obsahovat tabulky služeb:

    CREATE SCHEMA Service;
    GO
    
  5. Vytvoření tabulky služby s maskovanými sloupci:

    CREATE TABLE Service.Feedback (
        MemberID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY CLUSTERED,
        Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL,
        Rating INT MASKED WITH (FUNCTION = 'default()'),
        Received_On DATETIME
    );
    
  6. Vložení ukázkových dat:

    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. Vytvořte v databázi různé uživatele:

    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. Udělte uživatelům v databázi oprávnění ke čtení:

    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. Udělte uživatelům různá oprávnění UNMASK:

    --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. Zadejte dotaz na data v kontextu uživatele ServiceAttendant:

    EXECUTE AS USER = 'ServiceAttendant';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  11. Zadejte dotaz na data v kontextu uživatele ServiceLead:

    EXECUTE AS USER = 'ServiceLead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  12. Zadejte dotaz na data v kontextu uživatele ServiceManager:

    EXECUTE AS USER = 'ServiceManager';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  13. Dotazování dat v kontextu uživatele ServiceHead

    EXECUTE AS USER = 'ServiceHead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  14. Pokud chcete odvolat oprávnění UNMASK, použijte následující příkazy T-SQL:

    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;
    

Viz také