Planera och implementera dynamisk mask

Slutförd

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.

Policy för dynamisk datamaskering

  • SQL-användare undantas från maskering – En uppsättning SQL-användare eller Microsoft Entra-ID-identiteter som hämtar omaskerade data i SQL-frågeresultatet. Användare med administratörsbehörighet undantas alltid från maskering och visar ursprungliga data utan mask.
  • Maskeringsregler – En uppsättning regler som definierar vilka fält 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 exponering av data för olika scenarier.
Funktion Beskrivning Exempel
Standardvärde Fullständig maskering enligt datatyperna för de avsedda fälten.

För strängdatatyper använder du XXXX (eller färre) om fältets storlek är mindre än 4 tecken (tecken, nchar, varchar, nvarchar, text, ntext).

För numeriska datatyper använder du ett nollvärde (bigint, bit, decimal, int, money, numerisk, smallint, smallmoney, tinyint, float, real).

För datatyper för datum och tid använder du 1900-01-01 00:00:00.00000000 (datum, datetime2, datetime, datetimeoffset, smalldatetime, time).

För binära datatyper använder du en enda byte ASCII-värde 0 (binär, varbinär, bild).
Exempel på kolumndefinitionssyntax: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL

Exempel på alter syntax: ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()')
Email Maskeringsmetod som exponerar den första bokstaven i en e-postadress och det konstanta suffixet ".com" i form av en e-postadress. aXXX@XXXX.com. Exempeldefinitionssyntax: E-postvarchar(100) MASKERAD MED (FUNKTION = 'email()') NULL

Exempel på alter syntax: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
Slumpmässig En slumpmässig maskeringsfunktion för användning på valfri numerisk typ för att maskera det ursprungliga värdet med ett slumpmässigt värde inom ett angivet intervall. Exempeldefinitionssyntax: Account_Number bigint MASKED WITH (FUNCTION = 'random([start range], [end range])')

Exempel på alter syntax: ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
Anpassad sträng Maskeringsmetod som exponerar de första och sista bokstäverna och lägger till en anpassad utfyllnadssträng i mitten. prefix,[utfyllnad],suffix

Om det ursprungliga värdet är för kort för att slutföra hela masken exponeras inte en del av prefixet eller suffixet.
Exempeldefinitionssyntax: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL

Exempel på alter syntax: ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')

Detta omvandlar ett telefonnummer som 555.123.1234 till 5XXXXXXX.

Ytterligare exempel:

ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)')

Detta omvandlar ett telefonnummer som 555.123.1234 till 555.1XXXXXXX.
Datetime Gäller för: SQL Server 2022 (16.x)

Maskeringsmetod för kolumn som definierats med datatyp datetime, datetime2, datum, tid, datetimeoffset, smalldatetime. Det hjälper till att maskera året => datetime("Y"), month=> datetime("M") , day=>datetime("D"), hour=>datetime("h"), minute=>datetime("m" eller seconds=>datetime("s") delen av dagen.
Exempel på hur du maskerar året för datetime-värdet:

ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")')

Exempel på hur du maskerar månaden för datetime-värdet:

ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")')

Exempel på hur du maskerar minuten för datetime-värdet:

ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")')
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 <maskerat/> .
* 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
Email 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.

Skärmbild som visar maskeringsmetoden för att generera ett slumpmässigt tal.
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[utfyllnad]suffix

Skärmbild av navigeringsfönstret.

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;