Maschera dati dinamica

Si applica a:database SQL di AzureIstanza gestita di SQL di AzureAzure Synapse Analytics (solo pool dedicati di SQL)

Il database SQL di Azure, Istanza gestita di SQL di Azure e Azure Synapse Analytics supportano la maschera dati dinamica. 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 configurare un criterio della maschera dati dinamica nel portale di Azure, selezionare il pannello Dynamic Data Masking sotto Sicurezza nel riquadro di configurazione del database SQL. Non è possibile impostare questa funzionalità usando il portale per Istanza gestita di SQL. 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
E-mail 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.

Screenshot che mostra il metodo di mascheramento per la generazione di un numero casuale.
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

Screenshot del riquadro di spostamento.

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

Configurare la maschera dati dinamica per il database usando i cmdlet di PowerShell

Criteri di maschera dati

Regole di maschera dati

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.

  1. Creare uno schema per contenere le tabelle utente:

    CREATE SCHEMA Data;
    GO
    
  2. 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
    );
    
  3. 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');
    
  4. Creare uno schema per contenere le tabelle del servizio:

    CREATE SCHEMA Service;
    GO
    
  5. 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
    );
    
  6. 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');
    
  7. 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
    
  8. 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;
    
  9. 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;
    
  10. 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;
    
  11. 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;
    
  12. 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;
    
  13. 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;
    
  14. 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;