Sdílet prostřednictvím


Dynamické maskování dat

Platí pro: Azure SQL Database Azure SQL Managed InstanceAzure Synapse Analytics (pouze vyhrazené fondy SQL) databáze SQL v prostředcích infrastruktury

Azure SQL Database, databáze SQL v Microsoft Fabric, Azure SQL Managed Instance a Azure Synapse Analytics podporují dynamické maskování dat (DDM). 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

Pro Azure SQL Database nastavíte zásady dynamického maskování dat 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í webu Azure Portal pro spravovanou instanci SQL nebo databázi SQL v prostředcích infrastruktury. Místo toho použijte T-SQL, jako v příkladu dynamického maskování dat v tomto článku. 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 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.

Snímek obrazovky znázorňující metodu maskování pro generování náhodného čísla
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
Snímek obrazovky s navigačním podoknem

Modul doporučení DDM označí určitá pole z vaší databáze jako potenciálně citlivá pole, což může 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

Psát:

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