Dynamisk datamaskning

Gäller för:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (endast dedikerade SQL-pooler)

Azure SQL Database, Azure SQL Managed Instance och Azure Synapse Analytics stöder dynamisk datamaskering. Med dynamisk datamaskering begränsas exponeringen av känsliga data genom att de maskeras för icke-privilegierade användare.

Dynamisk datamaskning hjälper till att förhindra obehörig åtkomst till känsliga data genom att göra det möjligt för kunder att ange hur mycket av känsliga data som ska avslöjas med minimal effekt på programskiktet. Det är en principbaserad säkerhetsfunktion som döljer känsliga data i resultatuppsättningen för en fråga över angivna databasfält, medan data i databasen inte ändras.

En tjänstrepresentant på ett callcenter kan till exempel identifiera en uppringare genom att bekräfta flera tecken på sin e-postadress, men den fullständiga e-postadressen bör inte avslöjas för tjänstrepresentanten. En maskeringsregel kan definieras som maskerar alla e-postadresser i resultatuppsättningen för en fråga. Som ett annat exempel kan en lämplig datamask definieras för att skydda personliga data, så att en utvecklare kan fråga produktionsmiljöer i felsökningssyfte utan att bryta mot efterlevnadsreglerna.

Grunderna för dynamisk datamaskering

Du konfigurerar en princip för dynamisk datamaskering i Azure-portalen genom att välja bladet Dynamisk datamaskering under Säkerhet i konfigurationsfönstret för SQL Database. Den här funktionen kan inte anges med hjälp av portalen för SQL Managed Instance. Mer information finns i Dynamisk datamaskering.

Policy för dynamisk datamaskering

  • SQL-användare som undantas från maskering: En uppsättning SQL-användare, som kan innehålla identiteter från Microsoft Entra-ID (tidigare Azure Active Directory), som hämtar omaskerade data i SQL-frågeresultatet. Användare med administrativa rättigheter som serveradministratör, Microsoft Entra-administratör och db_owner roll kan visa ursprungliga data utan mask. (Obs! Det gäller även sysadmin-rollen i SQL Server)
  • Maskeringsregler: En uppsättning regler som definierar de avsedda fälten som ska maskeras och den maskeringsfunktion som används. De avsedda fälten kan definieras med hjälp av ett databasschemanamn, tabellnamn och kolumnnamn.
  • Maskeringsfunktioner: En uppsättning metoder som styr dataexponeringen för olika scenarier.
Maskeringsfunktion Maskeringslogik
Standardvärde Fullständig maskering enligt datatyperna för de avsedda fälten

* Använd XXXX (eller färre) om fältets storlek är mindre än 4 tecken för strängdatatyper (nchar, ntext, nvarchar).
* Använd ett nollvärde för numeriska datatyper (bigint, bit, decimal, int, money, numerisk, smallint, smallmoney, tinyint, float, real).
* Använd 1900-01-01 för datatyper för datum/tid (datum, datetime2, datetime, datetimeoffset, smalldatetime, time).
* För sql_variant används standardvärdet för den aktuella typen.
* För XML används dokumentet <masked /> .
* Använd ett tomt värde för särskilda datatyper (tidsstämpel, tabell, HierarchyID, uniqueidentifier, binary, image, varbinary och spatial types).
Kreditkort Maskeringsmetod, som exponerar de fyra sista siffrorna i de avsedda fälten och lägger till en konstant sträng som ett prefix i form av ett kreditkort.

XXXX-XXXX-XXXX-1234
E-post Maskeringsmetod, som exponerar den första bokstaven och ersätter domänen med XXX.com med ett konstant strängprefix i form av en e-postadress.

aXX@XXXX.com
Slumptal Maskeringsmetod, som genererar ett slumpmässigt tal enligt de valda gränserna och faktiska datatyper. Om de avsedda gränserna är lika med är maskeringsfunktionen ett konstant tal.

Screenshot that shows the masking method for generating a random number.
Anpassad text Maskeringsmetod, som exponerar de första och sista tecknen och lägger till en anpassad utfyllnadssträng i mitten. Om den ursprungliga strängen är kortare än det exponerade prefixet och suffixet används endast utfyllnadssträngen.

prefix[padding]suffix

Screenshot of the navigation pane.

DDM-rekommendationsmotorn flaggar vissa fält från databasen som potentiellt känsliga fält, vilket kan vara bra kandidater för maskering. I fönstret Dynamisk datamaskering i portalen visas de rekommenderade kolumnerna för databasen. Välj Lägg till mask för en eller flera kolumner, välj sedan lämplig maskeringsfunktion och välj Spara för att använda mask för dessa fält.

Hantera dynamisk datamaskning med T-SQL

Konfigurera dynamisk datamaskning för databasen med PowerShell-cmdletar

Principer för datamaskering

Datamaskeringsregler

Konfigurera dynamisk datamaskning för databasen med hjälp av REST-API:et

Du kan använda REST-API:et för att programmatiskt hantera principer och regler för datamaskering. Det publicerade REST-API:et stöder följande åtgärder:

Principer för datamaskering

Datamaskeringsregler

Behörigheter

Det här är de inbyggda rollerna för att konfigurera dynamisk datamaskning:

Det här är de åtgärder som krävs för att använda dynamisk datamaskning:

Läs/skriv:

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

Read (läs):

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

Skriva:

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

Mer information om behörigheter när du använder dynamisk datamaskering med T-SQL-kommandot finns i Behörigheter

Exempel på detaljerad behörighet

Förhindra obehörig åtkomst till känsliga data och få kontroll genom att maskera dem för en obehörig användare på olika nivåer i databasen. Du kan bevilja eller återkalla UNMASK-behörigheter på databasnivå, schemanivå, tabellnivå eller på kolumnnivå till valfri databasanvändare eller roll. I kombination med Microsoft Entra-autentisering kan UNMASK-behörigheter hanteras för användare, grupper och program som underhålls i din Azure-miljö. Unmask-behörigheten ger ett detaljerat sätt att kontrollera och begränsa obehörig åtkomst till data som lagras i databasen och förbättra datasäkerhetshanteringen.

  1. Skapa schema som ska innehålla användartabeller:

    CREATE SCHEMA Data;
    GO
    
  2. Skapa tabell med maskerade kolumner:

    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. Infoga exempeldata:

    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. Skapa schema som ska innehålla tjänsttabeller:

    CREATE SCHEMA Service;
    GO
    
  5. Skapa tjänsttabell med maskerade kolumner:

    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. Infoga exempeldata:

    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. Skapa olika användare i databasen:

    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. Bevilja läsbehörighet till användarna i databasen:

    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. Bevilja olika UNMASK-behörigheter till användare:

    --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. Fråga efter data under kontexten för användaren ServiceAttendant:

    EXECUTE AS USER = 'ServiceAttendant';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  11. Fråga efter data under kontexten för användaren ServiceLead:

    EXECUTE AS USER = 'ServiceLead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  12. Fråga efter data under kontexten för användaren ServiceManager:

    EXECUTE AS USER = 'ServiceManager';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  13. Fråga efter data under kontexten för användaren ServiceHead

    EXECUTE AS USER = 'ServiceHead';
    
    SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay
    FROM Data.Membership;
    
    SELECT MemberID, Feedback, Rating
    FROM Service.Feedback;
    
    REVERT;
    
  14. Om du vill återkalla UNMASK-behörigheter använder du följande T-SQL-instruktioner:

    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;
    

Se även