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. |
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 |
Rekommenderade fält att maskera
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
- Information om hur du skapar en dynamisk datamask finns i Skapa en dynamisk datamask.
- Information om hur du lägger till eller redigerar en mask i en befintlig kolumn finns i Lägga till eller redigera en mask i en befintlig kolumn.
- Om du vill bevilja behörigheter för att visa omaskerade data kan du läsa Bevilja behörigheter för att visa omaskerade data.
- Information om hur du släpper en dynamisk datamask finns i Släppa en dynamisk datamask.
Konfigurera dynamisk datamaskning för databasen med PowerShell-cmdletar
Principer för datamaskering
Datamaskeringsregler
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
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
- Skapa eller uppdatera: Skapar eller uppdaterar en databasdatamaskeringsprincip.
- Hämta: Hämtar en databasdatamaskeringsprincip.
Datamaskeringsregler
- Skapa eller uppdatera: Skapar eller uppdaterar en databasdatamaskeringsregel.
- Lista efter databas: Hämtar en lista över regler för databasdatamaskering.
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.
Skapa schema som ska innehålla användartabeller:
CREATE SCHEMA Data; GO
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 );
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');
Skapa schema som ska innehålla tjänsttabeller:
CREATE SCHEMA Service; GO
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 );
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');
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
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;
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;
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;
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;
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;
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;
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
- Dynamisk datamaskering för SQL Server.
- Avsnittet Exponerade data om detaljerade behörigheter för Azure SQL Dynamic Data Masking på Channel 9.