Planificarea și implementarea măștii dinamice
Azure SQL Database, Azure SQL Managed Instance și Azure Synapse Analytics acceptă mascarea dinamică a datelor. Mascarea dinamică a datelor limitează expunerea datelor sensibile prin mascarea acestora pentru utilizatorii neprivilegiați.
Mascarea dinamică a datelor ajută la prevenirea accesului neautorizat la datele sensibile, permițând clienților să desemneze cât de multe dintre datele sensibile să dezvăluie cu un efect minim asupra stratului aplicației. Este o caracteristică de securitate bazată pe politici care ascunde datele sensibile din setul de rezultate al unei interogări peste câmpurile de bază de date desemnate, în timp ce datele din baza de date nu sunt modificate.
De exemplu, un reprezentant de service de la un call center ar putea identifica un apelant prin confirmarea mai multor caractere ale adresei sale de e-mail, dar adresa de e-mail completă nu ar trebui să fie dezvăluită reprezentantului de service. Se poate defini o regulă de mascare care maschează toate adresele de e-mail din setul de rezultate al oricărei interogări. Ca un alt exemplu, o mască de date adecvată poate fi definită pentru a proteja datele personale, astfel încât un dezvoltator să poată interoga mediile de producție în scopuri de depanare fără a încălca reglementările de conformitate.
Noțiuni de bază despre mascarea dinamică a datelor
Configurați o politică de mascare dinamică a datelor în portalul Azure selectând panul Mascare dinamică a datelor sub Securitate în panoul de configurare SQL Database.
Politica de mascare dinamică a datelor
- Utilizatori SQL excluși de la mascare - Un set de utilizatori SQL sau identități Microsoft Entra ID care primesc date demascate în rezultatele interogării SQL. Utilizatorii cu privilegii de administrator sunt întotdeauna excluși de la mascare și vizualizează datele originale fără nicio mască.
- Reguli de mascare - Un set de reguli care definesc câmpurile desemnate pentru a fi mascate și funcția de mascare care este utilizată. Câmpurile desemnate pot fi definite folosind un nume de schemă de bază de date, un nume de tabel și un nume de coloană.
- Funcții de mascare - Un set de metode care controlează expunerea datelor pentru diferite scenarii.
| Funcționa | Descriere | Exemple |
|---|---|---|
| Implicit | Mascare completă în funcție de tipurile de date ale câmpurilor desemnate. Pentru tipurile de date șir, utilizați XXXX (sau mai puțin) dacă dimensiunea câmpului este mai mică de 4 caractere (char, nchar, varchar, nvarchar, text, ntext). Pentru tipurile de date numerice, utilizați o valoare zero (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real). Pentru tipurile de date și ore, utilizați 1900-01-01 00:00:00.0000000 (date, datetime2, datetime, datetimeoffset, smalldatetime, time). Pentru tipurile de date binare, utilizați un singur octet de valoare ASCII 0 (binar, varbinar, imagine). |
Exemplu de sintaxă de definiție a coloanei: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL Exemplu de sintaxă de modificare: ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()') |
| Metoda de mascare care expune prima literă a unei adrese de e-mail și sufixul constant ".com", sub forma unei adrese de e-mail. aXXX@XXXX.com. | Exemplu de sintaxă de definiție: Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL Exemplu de sintaxă de modificare: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()') |
|
| Aleatoriu | O funcție de mascare aleatorie pentru utilizare pe orice tip numeric pentru a masca valoarea originală cu o valoare aleatorie într-un interval specificat. | Exemplu de sintaxă de definiție: Account_Number bigint MASKED WITH (FUNCTION = 'random([interval de început], [interval de sfârșit])') Exemplu de alterare a sintaxei: ALTER COLUMN [Lună] ADD MASKED WITH (FUNCTION = 'random(1, 12)') |
| Șir personalizat | Metoda de mascare care expune prima și ultima literă și adaugă un șir de umplutură personalizat în mijloc. prefix,[completare], sufix Dacă valoarea inițială este prea scurtă pentru a completa întreaga mască, o parte din prefix sau sufix nu este expusă. |
Exemplu de sintaxă de definiție: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL Exemplu de sintaxă de modificare: ALTER COLUMN [Număr de telefon] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') Acest lucru transformă un număr de telefon precum 555.123.1234 în 5XXXXXXX. Exemplu suplimentar: ALTER COLUMN [Număr de telefon] ADD MASKED WITH (FUNCTION = 'partial(5,"XXXXXXX",0)') Acest lucru transformă un număr de telefon precum 555.123.1234 în 555.1XXXXXXX. |
| Dată și oră | Se aplică la: SQL Server 2022 (16.x) Metoda de mascare pentru coloana definită cu tipul de date datetime, datetime2, date, time, datetimeoffset, smalldatetime. Aceasta vă ajută să mascați anul => datetime("Y"), month=> datetime("M"), day=>datetime("D"), hour=>datetime("h"), minute=>datetime("m") sau seconds=>datetime("s") porțiune a zilei. |
Exemplu de mascare a anului valorii datetime: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("Y")') Exemplu de mascare a lunii valorii datetime: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("M")') Exemplu de mascare a minutei valorii datetime: ALTER COLUMN BirthDay ADD MASKED WITH (FUNCTION = 'datetime("m")') |
| Funcția de mascare | Logica mascării |
|---|---|
| Implicit | Mascare completă în funcție de tipurile de date ale câmpurilor desemnate * Utilizați XXXX (sau mai puțin) dacă dimensiunea câmpului este mai mică de 4 caractere pentru tipurile de date șir (nchar, ntext, nvarchar). * Utilizați o valoare zero pentru tipurile de date numerice (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real). * Utilizați 1900-01-01 pentru tipurile de date date/oră (date, datetime2, datetime, datetimeoffset, smalldatetime, time). * Pentru sql_variant, se utilizează valoarea implicită a tipului curent. * Pentru XML, documentul <mascat /> este folosit. * Utilizați o valoare goală pentru tipuri speciale de date (marcaj temporal, tabel, HierarchyID, identificator unic, binar, imagine, varbinar și tipuri spațiale). |
| Carte de credit | Metoda de mascare, care expune ultimele patru cifre ale câmpurilor desemnate și adaugă un șir constant ca prefix sub formă de card de credit. XXXX-XXXX-XXXX-1234 |
| Metoda de mascare, care expune prima literă și înlocuiește domeniul cu XXX.com folosind un prefix de șir constant sub forma unei adrese de e-mail. aXX@XXXX.com |
|
| Număr aleatoriu | Metoda de mascare, care generează un număr aleatoriu în funcție de limitele selectate și tipurile de date reale. Dacă limitele desemnate sunt egale, atunci funcția de mascare este un număr constant.
|
| Text personalizat | Metoda de mascare, care expune primul și ultimul caracter și adaugă un șir de umplutură personalizat în mijloc. Dacă șirul original este mai scurt decât prefixul și sufixul expus, se utilizează numai șirul de umplutură. prefix[padding]sufix
|
Câmpuri recomandate de mascat
Motorul de recomandări DDM semnalizează anumite câmpuri din baza de date ca câmpuri potențial sensibile, care pot fi candidați buni pentru mascare. În panoul Mascare dinamică a datelor din portal, vedeți coloanele recomandate pentru baza de date. Selectați Adăugare mască pentru una sau mai multe coloane, apoi selectați funcția de mascare corespunzătoare și selectați Salvare, pentru a aplica masca pentru aceste câmpuri.
Gestionați mascarea dinamică a datelor folosind T-SQL
- Pentru a crea o mască de date dinamice, consultați Crearea unei măști de date dinamice.
- Pentru a adăuga sau edita o mască pe o coloană existentă, consultați Adăugarea sau editarea unei măști pe o coloană existentă.
- Pentru a acorda permisiuni de vizualizare a datelor nemascate, consultați Acordarea permisiunilor de vizualizare a datelor nemascate.
- Pentru a renunța la o mască de date dinamice, consultați Renunțarea la o mască de date dinamice.
Configurarea mascării dinamice a datelor pentru baza de date utilizând cmdleturile PowerShell
Politici de mascare a datelor
Reguli de mascare a datelor
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
Configurați mascarea dinamică a datelor pentru baza de date utilizând API-ul REST
Puteți utiliza API-ul REST pentru a gestiona programatic politica și regulile de mascare a datelor. API-ul REST publicat acceptă următoarele operațiuni:
Politici de mascare a datelor
- Creare sau actualizare: Creează sau actualizează o politică de mascare a datelor bazei de date.
- Get: Obține o politică de mascare a datelor bazei de date.
Reguli de mascare a datelor
- Creare sau actualizare: Creează sau actualizează o regulă de mascare a datelor bazei de date.
- Listă după bază de date: Obține o listă de reguli de mascare a datelor bazei de date.
Permisiuni
Acestea sunt rolurile încorporate pentru a configura mascarea dinamică a datelor:
Acestea sunt acțiunile necesare pentru a utiliza mascarea dinamică a datelor:
Citire/Scriere:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Citi:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
Scrie:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
Pentru a afla mai multe despre permisiuni atunci când utilizați mascarea dinamică a datelor cu comanda T-SQL, consultați Permisiuni
Exemplu de permisiune granulară
Împiedicați accesul neautorizat la datele sensibile și obțineți controlul mascându-l unui utilizator neautorizat la diferite niveluri ale bazei de date. Puteți acorda sau revoca permisiunile UNMASK la nivel de bază de date, la nivel de schemă, la nivel de tabel sau la nivel de coloană oricărui utilizator sau rol al bazei de date. În combinație cu autentificarea Microsoft Entra, permisiunile UNMASK pot fi gestionate pentru utilizatori, grupuri și aplicații menținute în mediul dvs. Permisiunea UNMASK oferă o modalitate granulară de a controla și limita accesul neautorizat la datele stocate în baza de date și de a îmbunătăți gestionarea securității datelor.
Creați o schemă care să conțină tabele de utilizatori:
CREATE SCHEMA Data; GOCreați un tabel cu coloane mascate:
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 );Introduceți date eșantion:
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');Creați o schemă care să conțină tabele de servicii:
CREATE SCHEMA Service; GOCreați tabel de servicii cu coloane mascate:
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 );Introduceți date eșantion:
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');Creați diferiți utilizatori în baza de date:
CREATE USER ServiceAttendant WITHOUT LOGIN; GO CREATE USER ServiceLead WITHOUT LOGIN; GO CREATE USER ServiceManager WITHOUT LOGIN; GO CREATE USER ServiceHead WITHOUT LOGIN; GOAcordați permisiuni de citire utilizatorilor din baza de date:
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;Acordați diferite permisiuni UNMASK utilizatorilor:
--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;Interogați datele în contextul utilizatorului
ServiceAttendant:EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;Interogați datele în contextul utilizatorului
ServiceLead:EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;Interogați datele în contextul utilizatorului
ServiceManager:EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;Interogați datele în contextul utilizatorului
ServiceHead:EXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;Pentru a revoca permisiunile UNMASK, utilizați următoarele instrucțiuni 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;