Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di
AzureIstanza gestita di SQL di Azure
Always Encrypted e Always Encrypted con enclave sicuri sono funzionalità progettate per proteggere le informazioni riservate, inclusi i numeri di carta di credito e i numeri di identificazione nazionali o regionali (ad esempio i numeri di previdenza sociale degli Stati Uniti), nel database SQL di Azure, nell'istanza gestita di SQL di Azure e nei database di SQL Server. È possibile crittografare i dati sensibili all'interno delle applicazioni client, assicurandosi che le chiavi di crittografia non vengano mai esposte al motore di database. Questo approccio offre una separazione tra coloro che possiedono i dati e possono visualizzarli e quelli che gestiscono i dati, ma non devono avere accesso: amministratori di database locali, operatori di database cloud o altri utenti non autorizzati con privilegi elevati. Di conseguenza, Always Encrypted consente ai clienti di archiviare in modo sicuro i dati sensibili nel cloud e di ridurre la probabilità di furto di dati da parte di utenti malintenzionati.
Always Encrypted presenta determinate restrizioni, ad esempio l'impossibilità di eseguire operazioni sui dati crittografati, tra cui l'ordinamento e il filtro (ad eccezione delle ricerche da punto tramite la crittografia deterministica). Questa limitazione significa che alcune query e applicazioni potrebbero non essere compatibili con Always Encrypted o potrebbero richiedere modifiche significative alla logica dell'applicazione.
Per risolvere queste limitazioni, Always Encrypted con enclave sicuri consente al motore di database di elaborare i dati crittografati all'interno di un'area di memoria protetta denominata enclave sicura. Le enclave sicure migliorano le funzionalità di computing riservato di Always Encrypted con criteri di ricerca, altri operatori di confronto e crittografia sul posto.
Always Encrypted garantisce che la crittografia sia facile per le applicazioni. Nel client il driver abilitato per Always Encrypted crittografa i dati sensibili prima di inviarli al motore di database e riscrive automaticamente le query per mantenere la semantica dell'applicazione. Decrittografa automaticamente anche i risultati delle query dalle colonne di database crittografate.
Configurare Always Encrypted
Nota
Per le applicazioni che devono eseguire matching dei pattern, usare operatori di confronto, ordinare e indicizzare sulle colonne crittografate, implementare Always Encrypted con enclave sicure.
Questa sezione offre informazioni generali sulla configurazione di Always Encrypted. Per informazioni dettagliate e per iniziare, vedere Esercitazione: Introduzione a Always Encrypted.
Per configurare Always Encrypted nel database, seguire questa procedura:
Distribuire le chiavi crittografiche per proteggere i tuoi dati. Always Encrypted usa due tipi di chiavi:
- Chiavi di crittografia della colonna.
- Chiavi master della colonna.
Una chiave di crittografia della colonna crittografa i dati all'interno di una colonna crittografata. Una chiave master della colonna è una chiave di protezione delle chiavi che crittografa una o più chiavi di crittografia delle colonne.
Archiviare le chiavi master della colonna in un archivio chiavi attendibile all'esterno del sistema di database, ad esempio Azure Key Vault, archivio certificati Windows o un modulo di sicurezza hardware. Dopo questo passaggio, fornire le chiavi di crittografia delle colonne e crittografare ogni chiave con una chiave master delle colonne.
Infine, salva i metadati relativi alle chiavi nel database. I metadati della chiave master della colonna includono la posizione della chiave master della colonna. I metadati della chiave di crittografia della colonna contengono il valore crittografato della chiave di crittografia della colonna. Il motore di database non archivia o usa chiavi in testo non crittografato.
Per altre informazioni sulla gestione delle chiavi Always Encrypted, vedere Panoramica della gestione delle chiavi per Always Encrypted.
Configurare la crittografia per colonne di database specifiche che includono informazioni riservate per garantire la protezione. Questo passaggio potrebbe richiedere la creazione di nuove tabelle con colonne crittografate o la crittografia delle colonne e dei dati esistenti. Quando si configura la crittografia per una colonna, specificare i dettagli sull'algoritmo di crittografia, la chiave di crittografia della colonna per proteggere i dati e il tipo di crittografia. Always Encrypted supporta due tipi di crittografia:
La crittografia deterministica genera sempre lo stesso valore crittografato per un determinato valore di testo non crittografato. Usando la crittografia deterministica, è possibile eseguire ricerche puntuali, join di equivalenza, raggruppamenti e indicizzazioni su colonne crittografate. Tuttavia, gli utenti non autorizzati potrebbero indovinare informazioni sui valori crittografati esaminando i modelli nella colonna crittografata, soprattutto se è presente un piccolo set di possibili valori crittografati, ad esempio True/False o Nord/Sud/Est/Ovest.
La crittografia casuale usa un metodo che crittografa i dati in modo imprevedibile. Ogni input di testo non crittografato identico restituisce un output crittografato distinto. Questo metodo migliora la sicurezza della crittografia casuale.
Per eseguire la ricerca dei modelli utilizzando operatori di confronto, ordinamento e indicizzazione su colonne crittografate, adottare Always Encrypted con enclave sicure e utilizzare la crittografia randomizzata. La crittografia casuale Always Encrypted (senza enclave sicuri) non supporta la ricerca, il raggruppamento, l'indicizzazione o l'unione su colonne crittografate. Al contrario, per le colonne destinate a scopi di ricerca o raggruppamento, è necessario usare la crittografia deterministica. Questo tipo di crittografia consente operazioni quali ricerche di punti, join di uguaglianza, raggruppamento e indicizzazione su colonne crittografate.
Poiché il sistema di database per impostazione predefinita non ha accesso alle chiavi crittografiche, qualsiasi crittografia di colonna richiede lo spostamento e la crittografia dei dati all'esterno del database. Il processo di crittografia può richiedere molto tempo ed è vulnerabile alle interruzioni di rete. Inoltre, se è necessario crittografare nuovamente una colonna in un secondo momento, ad esempio quando si ruota la chiave di crittografia o si modificano i tipi di crittografia, si riscontrano di nuovo le stesse difficoltà. L'uso di Always Encrypted con enclave sicuri elimina la necessità di spostare i dati dal database. Poiché l'enclave è attendibile, un driver client all'interno dell'applicazione o uno strumento come SQL Server Management Studio (SSMS) può condividere in modo sicuro le chiavi con l'enclave durante le operazioni di crittografia. L'enclave può quindi crittografare o crittografare nuovamente le colonne sul posto, riducendo significativamente il tempo necessario per queste azioni.
Per informazioni dettagliate sugli algoritmi di crittografia Always Encrypted, vedere Crittografia Always Encrypted.
È possibile eseguire i passaggi precedenti usando gli strumenti SQL:
- Effettuare il provisioning di chiavi Always Encrypted con SQL Server Management Studio
- Configurare Always Encrypted con PowerShell
- sqlpackage : che automatizzano il processo di installazione
Per garantire che le chiavi Always Encrypted e i dati sensibili protetti non vengano mai rivelati in testo non crittografato nell'ambiente di database, il motore di database non può essere coinvolto nelle operazioni di provisioning delle chiavi e crittografia dei dati o decrittografia. Di conseguenza, Transact-SQL (T-SQL) non supporta il provisioning delle chiavi o le operazioni di crittografia. Per lo stesso motivo, la crittografia dei dati esistenti o la ri-crittografia (con un tipo di crittografia diverso o una chiave di crittografia della colonna) devono essere eseguite all'esterno del database (gli strumenti SQL possono automatizzare l'operazione).
Dopo aver modificato la definizione di una colonna crittografata, eseguire sp_refresh_parameter_encryption per aggiornare i metadati Always Encrypted per l'oggetto.
Limiti
Le limitazioni seguenti si applicano alle query sulle colonne crittografate:
Non è possibile eseguire calcoli su colonne crittografate con crittografia casuale. La crittografia deterministica supporta le operazioni seguenti che comportano confronti di uguaglianza. Non sono consentite altre operazioni:
- = (uguale a) (Transact-SQL) nelle ricerche puntuali.
- IN (Transact-SQL).
- SELECT - GROUP BY- Transact-SQL.
- DISTINCT.
Nota
Per le applicazioni che devono eseguire corrispondenza di modelli, usare operatori di confronto, ordinare e indicizzare colonne crittografate, implementare Always Encrypted con enclave sicure.
Non è possibile usare istruzioni di query che attivano calcoli che coinvolgono sia dati in testo non crittografato che crittografati. Ad esempio:
- Confronto tra una colonna crittografata e una colonna in testo non crittografato o un valore letterale.
- Copia di dati da una colonna di testo non crittografato in una colonna crittografata (o in altro modo)
UPDATE,BULK INSERT,SELECT INTOoINSERT..SELECT. - Inserimento di valori letterali nelle colonne crittografate.
Tali istruzioni generano errori di conflitto di tipo operando come il seguente:
Msg 206, Level 16, State 2, Line 89 Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with charLe applicazioni devono usare parametri di query per fornire valori per le colonne crittografate. Ad esempio, quando si inseriscono dati in colonne crittografate o li si filtra usando la crittografia deterministica, usare i parametri di query. Il passaggio di valori letterali o variabili T-SQL corrispondenti alle colonne crittografate non è supportato. Per altre informazioni specifiche per un driver client in uso, vedere Sviluppare applicazioni con Always Encrypted.
In SSMS è essenziale applicare la parametrizzazione per le variabili Always Encrypted per eseguire query che gestiscono i valori associati alle colonne crittografate. Questo requisito include scenari come l'inserimento di dati in colonne crittografate o l'applicazione di filtri su di essi (nei casi in cui viene usata la crittografia deterministica).
I parametri con valori di tabella destinati alle colonne crittografate non sono supportati.
Le query che usano le clausole seguenti non sono supportate:
Always Encrypted non è supportato per le colonne con le caratteristiche seguenti:
- Colonne che usano uno dei tipi di dati seguenti: xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, vector, alias, tipi definiti dall'utente.
- Colonne FILESTREAM .
- Colonne con la proprietà IDENTITY .
- Colonne con proprietà ROWGUIDCOL .
- Colonne stringa (varchar, char e altro) con regole di confronto diverse dalle binary-code point (
_BIN2) collations. Le regole di confronto non devono essere diverse dalle regole di confronto predefinite del database. - Colonne che corrispondono a chiavi per indici cluster e non cluster quando si usa la crittografia casuale (gli indici sulle colonne che usano la crittografia deterministica sono supportati).
- Colonne incluse negli indici full-text (Always Encrypted non supporta Full-Text Ricerca).
- Specificare le colonne calcolate in una tabella.
- Colonne alle quali fanno riferimento le colonne calcolate quando l'espressione esegue delle operazioni non supportate per Always Encrypted.
- Usare colonne di tipo sparse.
- Colonne a cui fanno riferimento le statistiche quando si usa la crittografia casuale (è supportata la crittografia deterministica).
- Partizionamento delle colonne.
- Colonne con vincoli predefiniti.
- Colonne a cui si fa riferimento da vincoli univoci quando si usa la crittografia casuale (è supportata la crittografia deterministica).
- Colonne di chiavi primarie quando si usa la crittografia casuale (la crittografia deterministica è supportata).
- Fare riferimento alle colonne nei vincoli di chiave esterna quando si usa la crittografia casuale o quando si usa la crittografia deterministica, se le colonne a cui si fa riferimento e fanno riferimento usano chiavi o algoritmi diversi.
- Colonne a cui fanno riferimento vincoli di controllo.
- Colonne acquisite o rilevate tramite Change Data Capture.
- Colonne chiave primaria nelle tabelle con rilevamento delle modifiche.
- Colonne mascherate tramite maschera dati dinamica.
- Quando si fa riferimento a una colonna in una tabella ottimizzata per la memoria in un modulo compilato in modo nativo, la crittografia non può essere applicata a nessuna delle colonne di tale tabella.
- Colonne nelle tabelle di database estese. (le tabelle con colonne crittografate con Crittografia sempre attiva possono essere abilitate per l'estensione).
Importante
Stretch Database è deprecato in SQL Server 2022 (16.x) e database SQL di Azure. Questa funzionalità verrà rimossa nelle versioni future del motore di database. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
- Colonne in tabelle esterne (PolyBase) (nota: l'uso di tabelle esterne e di tabelle con colonne crittografate nella stessa query è supportato).
Le funzionalità seguenti non sono supportate nelle colonne crittografate:
- Replica di SQL Server (replica transazionale, di tipo merge o snapshot). Sono supportate le funzionalità di replica fisica, inclusi i gruppi di disponibilità AlwaysOn.
- Query distribuite (server collegati, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL)).
- Query tra database che eseguono join su colonne crittografate provenienti da diversi database.
Informazioni di riferimento su Transact-SQL Always Encrypted
Always Encrypted usa le istruzioni Transact-SQL, le viste del catalogo di sistema, le stored procedure di sistema e le autorizzazioni seguenti.
Rendiconti
| Istruzione DDL | Description |
|---|---|
| CREATE COLUMN MASTER KEY | Crea un oggetto di metadati della chiave master della colonna in un database. |
| DROP COLUMN MASTER KEY | Elimina la chiave master di una colonna da un database. |
| CREA CHIAVE DI CIFRATURA DELLA COLONNA | Crea un oggetto di metadati della chiave di crittografia della colonna. |
| ALTER COLUMN ENCRYPTION KEY | Modifica una chiave di crittografia della colonna in un database, aggiungendo o eliminando un valore crittografato. |
| ELIMINA COLONNA CHIAVE DI CIFRATURA | Elimina la chiave di crittografia di una colonna da un database. |
| CREA TABELLA (CRIPTATA CON) | Specifica la crittografia delle colonne |
Viste del catalogo e stored procedure di sistema
| Viste del catalogo e stored procedure di sistema | Description |
|---|---|
| sys.column_encryption_keys | Restituisce informazioni sulle chiavi di crittografia della colonna (CEK) |
| sys.column_encryption_key_values | Restituisce informazioni sui valori crittografati delle chiavi di crittografia della colonna (CEK) |
| sys.column_master_keys | Restituisce una riga per ogni chiave master del database |
| sp_refresh_parameter_encryption | Aggiorna i metadati Always Encrypted per i parametri stored procedure non associati a schema specificato, funzione definita dall'utente, vista, trigger DML, trigger DDL a livello di database, o trigger DDL a livello di server nel database corrente. |
| sp_describe_parameter_encryption | Analizza l'istruzione Transact-SQL specificata e i relativi parametri per determinare quali parametri corrispondono alle colonne di database protette tramite la funzionalità Always Encrypted. |
Per informazioni sui metadati di crittografia archiviati per ogni colonna, vedere sys.columns.
Autorizzazioni per il database
Always Encrypted usa quattro autorizzazioni di database.
| Viste del catalogo e stored procedure di sistema | Description |
|---|---|
ALTER ANY COLUMN MASTER KEY |
(Obbligatorio per creare ed eliminare i metadati della chiave master della colonna). |
ALTER ANY COLUMN ENCRYPTION KEY |
(Obbligatorio per creare ed eliminare i metadati della chiave di crittografia della colonna). |
VIEW ANY COLUMN MASTER KEY DEFINITION |
Richiesta per accedere e leggere i metadati delle chiavi master della colonna, necessari per eseguire query sulle colonne crittografate. |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
Richiesta per accedere e leggere i metadati delle chiavi master della colonna, necessari per eseguire query sulle colonne crittografate. |
Nella tabella seguente sono riepilogate le autorizzazioni necessarie per le azioni comuni.
| Sceneggiatura | ALTER ANY COLUMN MASTER KEY |
ALTER ANY COLUMN ENCRYPTION KEY |
VIEW ANY COLUMN MASTER KEY DEFINITION |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
|---|---|---|---|---|
| Gestione delle chiavi (creazione, modifica o revisione dei metadati delle chiavi nel database) | X | X | X | X |
| Esecuzione di query in colonne crittografate | X | X |
Considerazioni importanti
Le
VIEW ANY COLUMN MASTER KEY DEFINITIONautorizzazioni eVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONsono necessarie quando si selezionano colonne crittografate. Queste autorizzazioni proteggono le colonne anche se l'utente non dispone dell'autorizzazione per le chiavi master della colonna negli archivi chiavi e impedisce l'accesso a testo non crittografato.In SQL Server, il ruolo fisso del database pubblico concede per impostazione predefinita le autorizzazioni sia
VIEW ANY COLUMN MASTER KEY DEFINITIONcheVIEW ANY COLUMN ENCRYPTION KEY DEFINITION. Un amministratore di database può scegliere di revocare o negare queste autorizzazioni al ruolo pubblico e concederle a ruoli o utenti specifici per implementare un controllo più limitato.Nel database SQL, il ruolo fisso del database public non concede le autorizzazioni
VIEW ANY COLUMN MASTER KEY DEFINITIONeVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONper impostazione predefinita. Questa modifica consente il corretto funzionamento di alcuni strumenti legacy esistenti che usano versioni precedenti di DacFx. Per usare le colonne crittografate (anche se non le decrittografa), un amministratore del database deve concedere in modo esplicito leVIEW ANY COLUMN MASTER KEY DEFINITIONautorizzazioni eVIEW ANY COLUMN ENCRYPTION KEY DEFINITION.