Planlæg og implementer dynamisk maske
Azure SQL Database, Azure SQL Managed Instance og Azure Synapse Analytics understøtter dynamisk datamaskering. Dynamiske datamaskering begrænser eksponeringen af følsomme data ved at maskere dem til brugere, der ikke erprivilegerede.
Dynamisk datamaskering hjælper med at forhindre uautoriseret adgang til følsomme data ved at gøre det muligt for kunderne at angive, hvor meget af de følsomme data der skal afsløres med minimal effekt på programlaget. Det er en politikbaseret sikkerhedsfunktion, der skjuler de følsomme data i resultatsættet for en forespørgsel over angivne databasefelter, mens dataene i databasen ikke ændres.
En tjenesterepræsentant i et opkaldscenter kan f.eks. identificere en person, der ringer op, ved at bekræfte flere tegn i sin mailadresse, men den komplette mailadresse bør ikke afsløres for servicerepræsentanten. Der kan defineres en maskeregel, der maskerer hele mailadressen i resultatsættet for en forespørgsel. Som et andet eksempel kan der defineres en passende datamaske for at beskytte personlige data, så en udvikler kan forespørge produktionsmiljøer til fejlfindingsformål uden at overtræde overholdelsesreglerne.
Grundlæggende om dynamisk datamaskering
Du kan konfigurere en politik for dynamisk datamaskering på Azure Portal ved at vælge bladet Dynamisk datamaskering under Sikkerhed i ruden konfiguration af SQL Database.
Politik for dynamisk datamaskering
- SQL-brugere er udelukket fra maskering – Et sæt SQL-brugere eller Microsoft Entra ID-identiteter, der henter ikke-afmaskede data i SQL-forespørgselsresultaterne. Brugere med administratorrettigheder udelukkes altid fra at maskere og få vist de oprindelige data uden nogen maske.
- Maskeringsregler – Et sæt regler, der definerer de angivne felter, der skal maskeres, og den maskefunktion, der bruges. De angivne felter kan defineres ved hjælp af et databaseskemanavn, tabelnavn og kolonnenavn.
- Maskeringsfunktioner – Et sæt metoder, der styrer eksponeringen af data i forskellige scenarier.
funktion | beskrivelse | eksempler |
---|---|---|
Standard | Fuld maskering i henhold til datatyperne for de angivne felter. I forbindelse med strengdatatyper skal du bruge XXXX (eller færre), hvis feltets størrelse er mindre end 4 tegn (tegn, nchar, varchar, nvarchar, tekst, ntext). Til numeriske datatyper skal du bruge en nulværdi (bigint, bit, decimal, int, penge, numerisk, smallint, smallmoney, tinyint, float, real). For datatyper for dato og klokkeslæt skal du bruge 1900-01-01 00:00:00.0000000 (dato, datetime2, datetimeoffset, smalldatetime, klokkeslæt). I forbindelse med binære datatyper skal du bruge en enkelt byte med ASCII-værdien 0 (binær, varbinary, image). |
Eksempel på kolonnedefinitionssyntaks: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL Eksempel på altersyntaks: ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()') |
Maskeringsmetode, der viser det første bogstav i en mailadresse og det konstante suffiks ".com" i form af en mailadresse. aXXX@XXXX.com. | Eksempel på definitionssyntaks: Mailvarchar(100) MASKED WITH (FUNCTION = 'email()') NULL Eksempel på ændring af syntaks: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()') |
|
Tilfældig | En tilfældig maskefunktion til brug på en hvilken som helst numerisk type til at maskere den oprindelige værdi med en vilkårlig værdi inden for et angivet område. | Eksempel på definitionssyntaks: Account_Number bigint MASKED WITH (FUNCTION = 'random([startområde], [slutområde])') Eksempel på altersyntaks: ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)') |
Brugerdefineret streng | Maskeringsmetode, der viser det første og sidste bogstav og tilføjer en brugerdefineret margenstreng i midten. præfiks,[indre margen],suffiks Hvis den oprindelige værdi er for kort til at fuldføre hele masken, vises en del af præfikset eller suffikset ikke. |
Eksempel på definitionssyntaks: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL Eksempel på altersyntaks: ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') Dette forvandler et telefonnummer som 555.123.1234 til 5XXXXXXXXX. Yderligere eksempel: ALTER COLUMN [Phone Number] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)') Dette forvandler et telefonnummer som 555.123.1234 til 555.1XXXXXXXX. |
Datetime | Gælder for: SQL Server 2022 (16.x) Maskeringsmetode for kolonne, der er defineret med datatypen datetime, datetime2, dato, klokkeslæt, datetimeoffset, smalldatetime. Det hjælper med at maskere året => datetime("Y"), month=> datetime("M"), day=>datetime("D"), hour=>datetime("h"), minute=>datetime("m") eller seconds=>datetime("s") del af dagen. |
Eksempel på, hvordan du maskerer året for datetime-værdien: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")') Eksempel på, hvordan du maskerer måneden for datetime-værdien: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")') Eksempel på, hvordan du maskerer minuttet for datetime-værdien: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")') |
funktionen maskering | maskeringslogik |
---|---|
Standard | Fuld maskering i henhold til datatyperne for de angivne felter * Brug XXXX (eller færre), hvis feltets størrelse er mindre end 4 tegn for strengdatatyper (nchar, ntext, nvarchar). * Brug en nulværdi til numeriske datatyper (bigint, bit, decimal, int, penge, numerisk, smallint, smallmoney, tinyint, float, real). * Brug 1900-01-01 til dato/klokkeslæt-datatyper (dato, datetime2, datetime, datetimeoffset, smalldatetime, klokkeslæt). * For sql_variant bruges standardværdien for den aktuelle type. * I forbindelse med XML bruges dokumentet <maskeret/>. * Brug en tom værdi til særlige datatyper (tidsstempel, tabel, Hierarki-id, entydigidentifikator, binær, billede, binære og rumlige typer). |
Kreditkort | Maskeringsmetode, der viser de sidste fire cifre i de angivne felter og tilføjer en konstantstreng som præfiks i form af et kreditkort. XXXX-XXXX-XXXX-1234 |
Maskeringsmetode, der viser det første bogstav og erstatter domænet med XXX.com ved hjælp af et konstant strengpræfiks i form af en mailadresse. aXX@XXXX.com |
|
Tilfældigt tal | Maskeringsmetode, der genererer et tilfældigt tal i henhold til de valgte grænser og faktiske datatyper. Hvis de angivne grænser er ens, er maskeringsfunktionen et konstanttal.![]() |
Brugerdefineret tekst | Maskeringsmetode, der viser det første og sidste tegn og tilføjer en brugerdefineret margenstreng i midten. Hvis den oprindelige streng er kortere end det synlige præfiks og suffiks, er det kun den indre streng, der bruges. præfiks[indre margen]suffiks ![]() |
Anbefalede felter, der skal maskere
Programmet DDM-anbefalinger markerer visse felter fra databasen som potentielt følsomme felter, hvilket kan være gode kandidater til maskering. I ruden Dynamisk datamaskering på portalen kan du se de anbefalede kolonner til databasen. Vælg Tilføj maske for en eller flere kolonner, vælg derefter den relevante maskefunktion, og vælg Gem for at anvende maske for disse felter.
Administrer dynamisk datamaskering ved hjælp af T-SQL
- Hvis du vil oprette en dynamisk datamaske, skal du se Oprettelse af en dynamisk datamaske.
- Hvis du vil tilføje eller redigere en maske i en eksisterende kolonne, skal du se Tilføjelse eller redigering af en maske i en eksisterende kolonne.
- Hvis du vil give tilladelser til at få vist ikke-maskede data, skal du se Tildeling af tilladelser til at få vist ikke-maskede data.
- Hvis du vil slippe en dynamisk datamaske, skal du se Slippe en dynamisk datamaske.
Konfigurer dynamisk datamaskering for din database ved hjælp af PowerShell-cmdlet'er
Politikker for datamaskering
Regler for datamaskering
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
Konfigurer dynamisk datamaskering for databasen ved hjælp af REST-API'en
Du kan bruge REST-API'en til programmeringsmæssigt at administrere politik og regler for datamaskering. Den publicerede REST API understøtter følgende handlinger:
Politikker for datamaskering
- Opret eller opdater: Opretter eller opdaterer en politik for maskening af databasedata.
- Hent: Henter en politik for maskering af databasedata.
Regler for datamaskering
- Opret eller opdater: Opretter eller opdaterer en regel for maske af databasedata.
- liste efter database: Henter en liste over regler for maskening af databasedata.
Tilladelser
Dette er de indbyggede roller til konfiguration af dynamisk datamaskering:
Dette er de handlinger, der kræves for at bruge dynamisk datamaskering:
Læse-/skriveadgang:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Læse:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
Skrive:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
Hvis du vil vide mere om tilladelser, når du bruger dynamisk datamaskering med T-SQL-kommandoen, skal du se Tilladelser
Eksempel på detaljeret tilladelse
Undgå uautoriseret adgang til følsomme data, og få kontrol ved at maskere dem til en uautoriseret bruger på forskellige niveauer i databasen. Du kan tildele eller tilbagekalde UNMASK-tilladelser på databaseniveau, skemaniveau, tabelniveau eller på kolonneniveau til en hvilken som helst databasebruger eller -rolle. Kombineret med Microsoft Entra-godkendelse kan UNMASK-tilladelser administreres for brugere, grupper og programmer, der vedligeholdes i dit Azure-miljø. UNMASK-tilladelsen giver en detaljeret måde at styre og begrænse uautoriseret adgang til data, der er gemt i databasen, og forbedre administrationen af datasikkerhed.
Opret skema, der indeholder brugertabeller:
CREATE SCHEMA Data; GO
Opret tabel med maskerede kolonner:
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 );
Indsæt eksempeldata:
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');
Opret et skema, der indeholder tjenestetabeller:
CREATE SCHEMA Service; GO
Opret tjenestetabel med maskerede kolonner:
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 );
Indsæt eksempeldata:
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');
Opret forskellige brugere 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
Tildel læsetilladelser til brugerne 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;
Tildel forskellige UNMASK-tilladelser til brugere:
--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;
Forespørg dataene under konteksten af brugerens
ServiceAttendant
:EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Forespørg dataene under konteksten af brugerens
ServiceLead
:EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Forespørg dataene under konteksten af brugerens
ServiceManager
:EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Forespørg dataene under konteksten af brugerens
ServiceHead
:EXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Hvis du vil tilbagekalde UNMASK-tilladelser, skal du bruge følgende T-SQL-sætninger:
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;