I quattro meccanismi da non confondere

Transparent data encryption cifra i dati a riposo — file di dati, log e backup — in modo trasparente all’applicazione, e proprio per questo non protegge da chi ha il permesso di leggere la tabella: serve contro il furto del file o del backup, non contro l’abuso di privilegi. La chiave può restare service-managed oppure diventare customer-managed in Azure Key Vault, scelta obbligata quando il requisito parla di bring your own key, di rotazione controllata dal cliente o di separazione fra chi amministra il database e chi amministra le chiavi.

Always Encrypted risponde a un requisito diverso: il dato deve restare illeggibile anche per il DBA. La cifratura avviene nel driver client, la column master key resta in un archivio controllato dal cliente e il motore vede solo ciphertext. Il prezzo è funzionale — la cifratura deterministica ammette solo l’uguaglianza, quella randomized nemmeno quella. Gli enclave VBS allargano lo spazio: dentro un’area di memoria isolata il motore esegue confronti di intervallo e pattern matching sui dati cifrati, senza esporre le chiavi al resto dell’istanza.

Dynamic data masking non cifra nulla. Applica una regola in presentazione sul risultato della query: i dati sottostanti restano in chiaro e chi ha il permesso UNMASK vede tutto. È riduzione dell’esposizione per utenti non privilegiati, non un controllo contro chi può interrogare liberamente il database.

Row-level security agisce invece sulle righe: una inline table-valued function fa da predicate function e una security policy la applica come filter predicate in lettura o come block predicate in scrittura. È lo strumento tipico per la multi-tenancy in tabella condivisa.

Integrità, classificazione e tracce

Il ledger fa una cosa sola: fornire evidenza di manomissione. Con hashing crittografico e history table dimostra che una riga non è stata alterata o cancellata senza lasciare traccia, e con i digest pubblicati all’esterno rende la verifica indipendente dall’amministratore. Riservatezza, però, non ne offre: chi ha i permessi legge.

Data classification etichetta le colonne per sensibilità, alimenta i report di conformità e arricchisce gli audit log. L’auditing scrive gli eventi su Log Analytics, Event Hubs o uno storage account e si configura a livello di server — ereditato da tutti i database — oppure di singolo database, tenendo presente che le due policy si sommano e duplicano i record. Per sapere invece quali dati sono cambiati a fini applicativi o di sincronizzazione lo strumento non è l’audit ma il change tracking.

La superficie di rete

Le regole di firewall a livello di server valgono per tutti i database di quel logical server; quelle a livello di database valgono per uno solo, ed è la risposta corretta quando il requisito isola un singolo database. L’opzione che consente l’accesso ai servizi Azure apre a indirizzi che non sono solo i tuoi. Il private endpoint di Azure Private Link porta il servizio dentro la VNet con un IP privato e consente di disabilitare del tutto l’accesso pubblico; il service endpoint non cambia l’indirizzo, estende l’identità della subnet verso l’endpoint pubblico e resta perciò insufficiente quando il requisito dice “nessun traffico verso IP pubblici”.

Trappole tipiche d’esame

  • Nemmeno l’amministratore del database deve vedere i codici fiscali → Always Encrypted: TDE è trasparente e non filtra i permessi, il dynamic data masking si aggira con UNMASK; solo le chiavi lato client escludono il DBA.
  • Serve un LIKE o un confronto di intervallo su una colonna cifrata → Always Encrypted con enclave VBS: la cifratura deterministica copre solo l’uguaglianza, e senza enclave la risposta corretta è che l’operazione non è supportata.
  • I backup devono restare illeggibili se il file esce dal perimetro → TDE: protegge dati a riposo e backup; Always Encrypted coprirebbe solo le colonne cifrate e la row-level security non c’entra nulla.
  • Ogni utente deve vedere solo le righe della propria filiale → row-level security: il masking nasconde valori nelle colonne, non righe, e una vista con WHERE si aggira accedendo direttamente alla tabella.
  • Dimostrare che i record storici non sono stati alterati → ledger: l’auditing registra chi ha fatto cosa, ma è una traccia esterna; il ledger è l’unico che fornisce prova crittografica di integrità.
  • Il database non deve essere raggiungibile da Internet → private endpoint con accesso pubblico disabilitato: le firewall rules restringono ma lasciano vivo l’endpoint pubblico, e il service endpoint continua a passare da quello.