Always Encrypted: funzionamento delle query sulle colonne crittografate
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Per eseguire una query sulle colonne di database crittografate, inserire dati in queste colonne, recuperare valori di testo non crittografato o eseguire operazioni supportate ,ad esempio ricerche di punti, usando la crittografia deterministica, l'utente o l'applicazione che esegue la query deve soddisfare i prerequisiti seguenti:
- Avere accesso alla chiave master della colonna che protegge i dati. Questa chiave di accesso è necessaria oltre alle autorizzazioni a livello di database, ad esempio SELECT nella tabella pertinente.
- Connettersi al database con Always Encrypted abilitato nella connessione di database. La maggior parte degli strumenti SQL e dei driver client SQL supporta l'abilitazione di Always Encrypted per le connessioni di database.
Nota
Se l'utente dispone delle autorizzazioni di database necessarie per leggere i dati, ma non ha accesso alle chiavi che li proteggono, può comunque riprendere i dati cifrati (crittografati) connettendosi al database senza abilitare Always Encrypted nella connessione di database.
Ecco come funzionano le query sulle colonne crittografate:
- Quando un'applicazione esegue una query con parametri, il driver client SQL all'interno dell'applicazione contatta in modo trasparente il motore di database chiamando sp_describe_parameter_encryption per determinare quali parametri sono destinati alle colonne crittografate e devono essere crittografati. Per ogni parametro che deve essere crittografato, il driver riceve l'algoritmo di crittografia, il tipo di crittografia e i metadati della chiave, inclusa la chiave di crittografia della colonna crittografata e la posizione della chiave master della colonna corrispondente.
- Il driver chiama l'archivio di chiavi contenente la chiave master della colonna per decriptare i valori della chiave di crittografia di colonna crittografati. Le chiavi di crittografia della colonna in testo non crittografato risultanti vengono memorizzate nella cache per ridurre il numero di round trip all'archivio di chiavi negli usi successivi delle stesse chiavi di crittografia delle colonne.
- Il driver usa le chiavi di crittografia della colonna in testo non crittografato ottenute per crittografare i parametri di query corrispondenti alle colonne crittografate.
- Il driver sostituisce i valori in testo non crittografato dei parametri destinati alle colonne crittografate con i relativi valori crittografati e invia la query al motore di database per l'elaborazione.
- Il motore di database esegue la query, il che può comportare confronti di uguaglianza su colonne che usano la crittografia deterministica.
- Se i risultati della query includono i dati delle colonne crittografate, il motore di database allega i metadati di crittografia per ogni colonna, incluse le informazioni sull'algoritmo di crittografia, il tipo di crittografia e i metadati della chiave al set di risultati.
- Il motore di database invia il set di risultati all'applicazione client.
- Per ogni colonna crittografata nel set di risultati ricevuto, il driver tenta innanzitutto di trovare la chiave di crittografia della colonna in testo non crittografato nella cache locale ed effettua un round trip nell'archivio di chiavi in cui si trova la chiave master della colonna solo se non riesce a trovare la chiave nella cache.
- Il driver decripta i risultati e restituisce i valori in testo non crittografato all'applicazione.
Un driver client interagisce con un archivio di chiavi, contenente una chiave master di colonna, utilizzando un provider dell'archivio delle chiavi master delle colonne, che è un componente software lato client che incapsula un archivio di chiavi contenente la chiave master delle colonne. I provider per i tipi comuni di archivi di chiavi sono disponibili nei cataloghi dei driver lato client di Microsoft o come download autonomi. È anche possibile implementare il proprio provider. Le funzionalità di Always Encrypted, inclusi i provider di archivio delle chiavi master delle colonne predefiniti, variano in base a una libreria di driver e alla relativa versione.
Vedere Sviluppare applicazioni usando Always Encrypted per ottenere l'elenco dei driver client che supportano Always Encrypted e per avere informazioni su come sviluppare applicazioni che eseguono query su colonne crittografate.
È anche possibile eseguire query su colonne crittografate usando gli strumenti SQL, ad esempio eseguire query su colonne usando Always Encrypted con Azure Data Studio o query con Always Encrypted con SQL Server Management Studio.