Nel precedente articolo Data masking con sqlcmdcli abbiamo trattato il tema complesso dell’anonimizzazione dei dati quando si deve prelevare un database di produzione per effettuare test in ambiente di sviluppo anche all’esterno del perimetro aziendale del cliente. Una possibile soluzione è quella di mascherare i dati sensibili su una copia del database di produzione chiedendo al cliente di effettuare le opportune verifiche prima di darci l’autorizzazione definitiva a prelevare la copia dei dati anonimizzata.
Il comando anonymizedb della command line interface sqlcmdcli permette di effettuare questo tipo di anonimizzazione, non reversibile, su tutte le colonne di tipo testo di un database. Il comando anonymizedb è stato recentemente arricchito di nuove opzioni che permettono di effettuare l’operazione di anonimizzazione di una colonna specifica limitando l’operazione solo ai dati sensibili per l’azienda o privati per le persone.
Scarichiamo l’ultima release di sqlcmdcli dal repository GitHub in cui è pubblicata, la trovate qui.
Estraiamo l’exe contenuto all’interno del file sqlcmdcli.zip e lo posizioniamo, per esempio, nella directory C:\SQL\Tools\sqlcmdcli.
La VM in cui si effettuerà il test ha una installazione locale di SQL Server 2022 Developer Edition che ospita il database di esempio WideWorldImporters la cui guida di installazione è disponibile qui.
Si desidera anonimizzare la colonna PhoneNumber della tabella Application.People del database WideWorldImporters. La colonna PhoneNumber contiene infatti il numero di telefono dei dipendenti dell’azienda. Lo stesso ragionamento può essere esteso alla colonna LogonName, EmailAddress, ecc…sqlcmdcli è in grado di anonimizzare la colonna PhoneNumber eseguendo il seguente comando:
sqlcmdcli.exe anonymizedb -servername:sql2022 -databasename:WideWorldImporters -username:xxxxx -password:xxxxx -schemaname:Application -tablename:People -columnname:PhoneNumber -verbose
L’output con l’opzione -verbose attiva è illustrato nella figura seguente:
La colonna PhoneNumber è stata anonimizzata, procediamo con l’anonimizzazione della colonna LogonName con il seguente comando:
sqlcmdcli.exe anonymizedb -servername:sql2022 -databasename:WideWorldImporters -username:xxxxx -password:xxxxx -schemaname:Application -tablename:People -columnname:LogonName -verbose
L’output è illustrato nella figura seguente:
Anche la colonna LogonName è stata anonimizzata, questo è il risultato:
PersonID LogonName FullName
----------- -------------------------------------------------- ---------------------
2 qgrg}F}ojk}uxrjosvuxzkxy4ius Kayla Woodcock
3 n{jyutuF}ojk}uxrjosvuxzkxy4ius Hudson Onslow
4 oyghkrrgxF}ojk}uxrjosvuxzkxy4ius Isabella Rupp
5 k|gsF}ojk}uxrjosvuxzkxy4ius Eva Muirden
6 yuvnognF}ojk}uxrjosvuxzkxy4ius Sophia Hinton
7 gszF}ojk}uxrjosvuxzkxy4ius Amy Trefl
8 gtznutmF}ojk}uxrjosvuxzkxy4ius Anthony Grosse
9 groiglF}ojk}uxrjosvuxzkxy4ius Alica Fatnowna
10 yzkrrgxF}ojk}uxrjosvuxzkxy4ius Stella Rosenhain
11 kzngtuF}ojk}uxrjosvuxzkxy4ius Ethan Onslow
12 nktxlF}ojk}uxrjosvuxzkxy4ius Henry Forlonge
13 n{jyutnF}ojk}uxrjosvuxzkxy4ius Hudson Hollinworth
14 roriF}ojk}uxrjosvuxzkxy4ius Lily Code
15 zgpyF}ojk}uxrjosvuxzkxy4ius Taj Shand
16 gxinkxrF}ojk}uxrjosvuxzkxy4ius Archer Lamble
17 vovkxqF}ojk}uxrjosvuxzkxy4ius Piper Koch
18 qgzokjF}ojk}uxrjosvuxzkxy4ius Katie Darwin
19 pgoyF}ojk}uxrjosvuxzkxy4ius Jai Shand
20 pgiqvF}ojk}uxrjosvuxzkxy4ius Jack Potter
E’ importante ricordare che questa tecnica di anonimizzazione non è reversibile e non deve essere utilizzata in produzione!
Buon divertimento con sqlcmdcli e se qualcuno volesse contribuire al progetto e il benvenuto!