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 vystavení citlivých dat tím, že je maskuje neprivilegovaným uživatelům.

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 okna 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 nebo identit Azure AD, které získávají nemaskovaná data ve výsledcích dotazu SQL. Uživatelé s právy správce, jako je správce serveru, správce Azure AD nebo 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).
• Pro číselné datové typy (bigint, bit, decimal, int, money, numeric, smallint, smallint, smallmoney, tinyint, float, real) použijte nulovou hodnotu.
• 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 použije dokument <masked /> .
• 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
Email 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/*

Číst:

  • 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. Uživateli databáze, identitě Azure AD, skupině Azure AD nebo databázové roli můžete udělit nebo odvolat oprávnění UNMASK na úrovni databáze, na úrovni schématu nebo na úrovni sloupce. Použití oprávnění UNMASK poskytuje podrobnější 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é