Maschera dati dinamica
Si applica a: database SQL di Azure Istanza gestita di SQL di Azure Database SQL di Azure Synapse Analytics (solo pool SQL dedicati) in Fabric
database SQL di Azure, database SQL in Microsoft Fabric, Istanza gestita di SQL di Azure e Azure Synapse Analytics supportano la maschera dati dinamica (DDM). La funzione Maschera dati dinamica limita l'esposizione dei dati sensibili, nascondendoli agli utenti senza privilegi.
Dynamic Data Masking contribuisce a evitare l’accesso non autorizzato ai dati sensibili consentendo ai clienti di definire la quantità di dati sensibili da rivelare, in modo da avere un effetto minimo sul livello dell'applicazione. Si tratta di una funzionalità di sicurezza basata su criteri che consente di nascondere i dati sensibili nel set di risultati di una query in campi del database designati, senza modificare i dati contenuti nel database.
Ad esempio, un addetto all'assistenza di un call center potrebbe identificare una persona che chiama confermando alcuni caratteri del suo indirizzo e-mail, ma l'indirizzo e-mail completo non dovrebbe essere rivelato all'addetto all'assistenza. È possibile definire una regola di mascheramento che maschera tutti gli indirizzi e-mail nel set di risultati di qualsiasi query. Come altro esempio, è possibile definire una maschera dati appropriata per proteggere i dati personali, in modo che uno sviluppatore possa eseguire query negli ambienti di produzione per la risoluzione dei problemi senza violare le normative di conformità.
Nozioni fondamentali su Dynamic Data Masking
Per database SQL di Azure, è possibile configurare un criterio di maschera dati dinamica nel portale di Azure selezionando il riquadro Maschera dati dinamica in Sicurezza nel riquadro di configurazione database SQL.
Questa funzionalità non può essere impostata usando il portale di Azure per Istanza gestita di SQL o il database SQL in Fabric. Usare invece T-SQL, come nell'esempio Dynamic Data Masking in questo articolo. Per altre informazioni, vedere Dynamic Data Masking.
Criteri di mascheramento dei dati dinamici
- Utenti SQL esclusi dalla maschera: un insieme di utenti SQL, che può includere identità di Microsoft Entra ID (in precedenza Azure Active Directory) che ricevono dati senza maschera nei risultati delle query SQL. Gli utenti con diritti amministrativi come l'amministratore del server, l'amministratore di Microsoft Entra e il ruolo db_owner possono visualizzare i dati originali senza maschera. Nota: si applica anche al ruolo amministratore di sistema in SQL Server.
- Regole di mascheramento: un insieme di regole che definisce i campi designati a cui applicare la maschera e la funzione di mascheramento da usare. I campi designati possono essere definiti tramite uno schema, un nome di tabella e un nome di colonna del database.
- Funzioni di mascheramento: un insieme di metodi che consente di controllare l'esposizione dei dati per scenari diversi.
Funzione di mascheramento | Logica di mascheramento |
---|---|
Predefinita | Mascheramento completo in base ai tipi di dati dei campi designati * Usare XXXX (o meno) se le dimensioni del campo sono inferiori a 4 caratteri per i dati di tipo stringa (nchar, ntext, nvarchar).* Usare un valore uguale a zero per i tipi di dati numerici (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real). * Usare 1900-01-01 per i tipi di dati di data/ora (date, datetime2, datetime, datetimeoffset, smalldatetime, time).* Per sql_variant, viene usato il valore predefinito del tipo corrente. * Per XML viene usato il documento <masked /> .* Usare un valore vuoto per tipi di dati speciali (timestamp, table, HierarchyID, uniqueidentifier, binary, image, varbinary e tipi spaziali). |
Carta di credito | Metodo di mascheramento che espone le ultime quattro cifre dei campi designati e aggiunge una stringa costante come prefisso sotto forma di carta di credito.XXXX-XXXX-XXXX-1234 |
Metodo di mascheramento che rende visibile la prima lettera e sostituisce il dominio con XXX.com usando un prefisso stringa costante sotto forma di indirizzo di posta elettronica.aXX@XXXX.com |
|
Numero casuale | Metodo di mascheramento che genera un numero casuale secondo i limiti selezionati e i tipi di dati effettivi. Se i limiti designati sono uguali, la funzione maschera è un numero costante. |
Testo personalizzato | Metodo di mascheramento che rende visibile il primo e l'ultimo carattere e aggiunge una stringa di riempimento personalizzata al centro. Se la stringa originale è più corta del prefisso e del suffisso visibili, viene usata solo la stringa di riempimento.prefix[padding]suffix |
Campi consigliati a cui applicare la maschera
Il motore di raccomandazioni DDM evidenzia determinati campi del database come potenzialmente sensibili e quindi come ottimi candidati per l'applicazione della maschera. Nel riquadro Dynamic Data Masking nel portale sono visibili le colonne consigliate per il proprio database. Selezionare Aggiungi maschera per una o più colonne, quindi selezionare la funzione di maschera appropriata e selezionare Salva per applicare la maschera per questi campi.
Gestire Dynamic Data Masking usando T-SQL
- Per creare una maschera dati dinamica, vedere Creare una maschera dati dinamica.
- Per aggiungere o modificare una maschera in una colonna esistente, vedere Aggiungere o modificare una maschera in una colonna esistente.
- Per concedere le autorizzazioni per visualizzare i dati senza maschera, vedere Concedere le autorizzazioni per visualizzare i dati non mascherati.
- Per escludere una maschera dati dinamica, vedere Eliminare una maschera dati dinamica.
Configurare la maschera dati dinamica per il database usando i cmdlet di PowerShell
Criteri di maschera dati
Regole di maschera dati
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
Configurare la maschera dati dinamica per il database usando l'API REST
È possibile usare l'API REST per gestire a livello programmatico i criteri e le regole di maschera dati. L'API REST pubblicata supporta le operazioni seguenti:
Criteri di maschera dati
- Crea o aggiorna: consente di creare o aggiornare un criterio di maschera dati del database.
- Ottieni: consente di ottenere un criterio di maschera dati del database.
Regole di maschera dati
- Crea o aggiorna: consente di creare o aggiornare una regola di maschera dati del database.
- Elenco per database: consente di ottenere un elenco di regole di maschera dati del database.
Autorizzazioni
Questi sono i ruoli predefiniti per configurare la maschera dati dinamica:
Queste sono le azioni necessarie per usare la maschera dati dinamica:
Lettura/scrittura:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
Read:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
Scrittura:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
Per altre informazioni sulle autorizzazioni quando si usa la maschera dati dinamica con il comando T-SQL, vedere Autorizzazioni.
Esempio di autorizzazione granulare
Impedire l'accesso non autorizzato ai dati sensibili e ottenere il controllo mascherandolo a un utente non autorizzato a livelli diversi del database. È possibile concedere o revocare le autorizzazioni UNMASK a livello di database, a livello di schema, a livello di tabella o a livello di colonna a qualsiasi utente o ruolo del database. In combinazione con l'autenticazione a Microsoft Entra, le autorizzazioni UNMASK possono essere gestite per utenti, gruppi e applicazioni mantenute all'interno dell'ambiente Azure. L'autorizzazione UNMASK offre un modo granulare per controllare e limitare l'accesso non autorizzato ai dati archiviati nel database e migliorare la gestione della sicurezza dei dati.
Creare uno schema per contenere le tabelle utente:
CREATE SCHEMA Data; GO
Creare una tabella con colonne mascherate:
CREATE TABLE Data.Membership ( MemberID INT IDENTITY(1, 1) NOT NULL, 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 );
Inserisci dati di esempio:
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');
Creare uno schema per contenere le tabelle del servizio:
CREATE SCHEMA Service; GO
Creare una tabella del servizio con colonne mascherate:
CREATE TABLE Service.Feedback ( MemberID INT IDENTITY(1, 1) NOT NULL, Feedback VARCHAR(100) MASKED WITH (FUNCTION = 'default()') NULL, Rating INT MASKED WITH (FUNCTION = 'default()'), Received_On DATETIME );
Inserisci dati di esempio:
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');
Creare utenti diversi nel database:
CREATE USER ServiceAttendant WITHOUT LOGIN; GO CREATE USER ServiceLead WITHOUT LOGIN; GO CREATE USER ServiceManager WITHOUT LOGIN; GO CREATE USER ServiceHead WITHOUT LOGIN; GO
Concedere autorizzazioni di lettura agli utenti nel database:
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;
Concedere autorizzazioni UNMASK diverse agli utenti:
--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;
Eseguire query sui dati nel contesto dell'utente ServiceLead
ServiceAttendant
:EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Eseguire query sui dati nel contesto dell'utente ServiceLead
ServiceLead
:EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Eseguire query sui dati nel contesto dell'utente ServiceLead
ServiceManager
:EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Eseguire query sui dati nel contesto dell'utente
ServiceHead
EXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;
Per revocare autorizzazioni UNMASK, usare le istruzioni T-SQL seguenti:
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;