Implementare i controlli di conformità per i dati sensibili

Completato

L'implementazione dei controlli di conformità dopo la migrazione del database è importante per garantire che i dati rimangano sicuri e conformi alle normative pertinenti. La migrazione a un nuovo ambiente, ad esempio Azure SQL, introduce nuove funzionalità di sicurezza.

Esplorare il controllo del server e del database

L'opzione Controllo di Azure SQL tiene traccia degli eventi del database, registrandoli in un log di controllo archiviato nell'account di archiviazione di Azure, nell'area di lavoro Log Analytics o in Hub eventi. Inoltre, facilita la manutenzione della conformità alle normative, l'analisi dei modelli di attività e il rilevamento di deviazioni che potrebbero potenzialmente indicare violazioni della sicurezza.

È possibile definire criteri a livello di server e a livello di database. I criteri a livello di server coprono automaticamente i database nuovi ed esistenti in Azure.

  • L'abilitazione del controllo del server attiva il controllo per il database, indipendentemente dalle singole impostazioni di controllo.
  • È possibile abilitare il controllo a livello di database, consentendo la coesistenza simultanea dei criteri del server e del database.
  • Il controllo sulle repliche di sola lettura viene abilitato automaticamente.

È consigliabile non abilitare sia il controllo del server che il controllo del database contemporaneamente, fatta eccezione per gli scenari seguenti.

  • È necessario disporre di un account di archiviazione, un periodo di conservazione o un'area di lavoro Log Analytics distinta per un determinato database.

  • È necessario un controllo per un database specifico con tipi di evento univoci o categorie distinte dalle altre nel server.

In tutti gli altri casi, è consigliabile abilitare solo il controllo a livello di server e lasciare disabilitato il controllo a livello di database per tutti i database.

I criteri di controllo predefiniti per il database SQL includono il set seguente di gruppi di azioni:

Gruppo di azioni Definizione
BATCH_COMPLETED_GROUP Controlla tutte le query e le stored procedure eseguite sul database.
SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP Indica che un'entità è riuscita ad accedere al database.
FAILED_DATABASE_AUTHENTICATION_GROUP Indica che un'entità non è riuscita ad accedere al database.

Per abilitare il controllo per tutti i database in un server di Azure SQL, selezionare Controllo nella sezione Sicurezza del pannello principale del server.

Screenshot of auditing option in the Security section of a SQL server.

La pagina Controllo consente di impostare la destinazione del log di controllo e anche di scegliere se tenere traccia delle operazioni dei tecnici del supporto Microsoft nella stessa destinazione del log di Controllo SQL di Azure o se selezionare una destinazione diversa.

Screenshot of the Auditing page of a SQL server.

È possibile esaminare i log di controllo delle operazioni del supporto tecnico Microsoft nell'area di lavoro Log Analytics eseguendo la query seguente:

AzureDiagnostics
| where Category == "DevOpsOperationsAudit"

Importante

I servizi di controllo del database SQL di Azure e le istanze gestite di SQL di Azure sono stati ottimizzati per garantire una disponibilità e prestazioni ottimali. Tuttavia, vale la pena notare che in condizioni di attività estremamente elevata o di congestione significativa della rete, alcuni eventi controllati potrebbero non essere registrati.

Controllare le etichette sensibili

In combinazione con la classificazione dei dati, è anche possibile monitorare l'accesso ai dati sensibili. Controllo SQL di Azure è stato migliorato in modo da includere nel log di controllo un nuovo campo denominato data_sensitivity_information.

Registrando le etichette di riservatezza dei dati restituiti da una query, questo campo consente di tenere traccia in modo più semplice dell'accesso alle colonne classificate.

Screenshot of the Information Protection page from Azure portal.

Il controllo è costituito dal rilevamento e dalla registrazione degli eventi che si verificano nel motore di database. Il controllo SQL di Azure semplifica i passaggi di configurazione necessari per abilitarlo, rendendo più semplice il rilevamento delle attività del database per il database SQL e Istanza gestita di SQL.

Maschera dati dinamica

Dynamic Data Masking funziona offuscando i dati per limitarne l'esposizione. Consente agli utenti che non necessitano di accedere alle informazioni riservate di visualizzare la colonna ma non i dati effettivi. Dynamic Data Masking funziona a livello di presentazione e che i dati non mascherati resteranno visibili per gli utenti con privilegi elevati.

Dynamic Data Masking offre il vantaggio di richiedere modifiche minime all'applicazione o al database. È possibile configurarlo comodamente tramite il portale di Azure o usando T-SQL.

Screenshot of the dynamic data masking T-SQL commands.

Entrambe le colonne PhoneNumber ed EmailAddress sono nascoste all'utente DDMDemo che ha solo l'autorizzazione SELECT per la tabella. L'utente può visualizzare le ultime quattro cifre del numero di telefono perché viene mascherato usando una funzione partial che sostituisce tutte le cifre contenute nella colonna a eccezione delle ultime quattro. Questa maschera è considerata una funzione personalizzata. Oltre a T-SQL, se si usa il database SQL di Azure, è possibile creare regole di maschera dinamica nel portale di Azure.

Screenshot of how to add masking rule in Azure portal.

È possibile aggiungere una regola di mascheramento passando al database nel portale di Azure e selezionando Dynamic Data Masking nella sezione Sicurezza del pannello principale del database.

I criteri di mascheramento supportati da Dynamic Data Masking che è possibile usare sono i seguenti:

Funzione di mascheramento Definizione Esempio T-SQL
Predefinita Maschera completamente i dati nella colonna senza esporre alcuna parte dei valori all'utente. L'utente visualizzerà XXXX per i valori stringa, 0 per i numeri e 01.01.1900 per i valori di data. ALTER TABLE [Customer] ALTER COLUMN Address ADD MASKED WITH (FUNCTION = 'default()')
Carta di credito Maschera tutti i caratteri tranne i quattro finali, consentendo agli utenti di visualizzare le ultime quattro cifre. Questa maschera può essere utile per gli agenti del servizio clienti che devono visualizzare le ultime quattro cifre di un numero di carta di credito, ma che non hanno la necessità di visualizzare l'intero numero. I dati sono visualizzati nel formato consueto di un numero di carta di credito, XXXX-XXXX-XXXX-1234. ALTER TABLE [Customer] ALTER COLUMN Address ADD MASKED WITH (FUNCTION = 'partial(0,"XXXX-XXXX-XXXX-",4)')
E-mail Solo la prima lettera e il suffisso di dominio finale non sono mascherati, ad esempio "aXXX@XXXXXXX.com" ALTER TABLE [Customer] ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
Numero Questo formato di mascheramento deve essere usato nelle colonne numeriche. Mostra un numero casuale come valore mascherato anziché il valore effettivo. Con ogni query viene visualizzato un numero diverso. ALTER TABLE [Customer] ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
Stringa personalizzata Questa opzione consente di mascherare il testo con qualsiasi valore e di visualizzare un numero personalizzato di caratteri a una delle estremità del valore mascherato. Se la lunghezza del valore da mascherare è minore o uguale al numero di caratteri specificato dalla maschera, verranno visualizzati solo i caratteri mascherati. ALTER TABLE [Customer] ALTER COLUMN [PhoneNumber] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)')

Per consentire agli utenti di recuperare i dati non mascherati dalle colonne per cui è definito il mascheramento, è necessario concedere in modo esplicito l'autorizzazione UNMASK.

Nota

È possibile identificare i dati mascherati usando l'inferenza in base ai risultati. Se si usa la maschera dati, si deve anche limitare la possibilità dell'utente di eseguire query ad hoc.

Per questo motivo, è consigliabile combinare la maschera dati dinamica con altre funzionalità di sicurezza, ad esempio il controllo, la crittografia e la sicurezza a livello di riga per migliorare la protezione dei dati sensibili.

Caso d'uso

La maschera dati è una funzionalità semplice e leggera, ideale per diversi scenari, tra cui:

  • Mascherare i dati alla vista degli utenti dell'applicazione che non hanno un accesso diretto al database.

  • Limitare le informazioni private per un gruppo di utenti.

  • Fornire dati mascherati ai fornitori esterni, dove è necessario proteggere le informazioni sensibili pur conservando le relazioni tra gli elementi dei dati.

  • Esportare una copia del database di produzione in un ambiente inferiore per scopi di sviluppo tramite un utente che non ha l'autorizzazione UNMASK. I dati esportati sono in formato mascherato.

Importare ed esportare dati

Usando SELECT INTO o INSERT INTO per copiare i dati da una colonna con maschera in un'altra tabella vengono restituiti i dati mascherati nella tabella di destinazione.

Quando un utente senza il privilegio UNMASK esegue l'importazione e l'esportazione di SQL Server, il file di dati esportato conterrà i dati mascherati e il database importato conterrà i dati mascherati inattivi.