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. Consente ai client di crittografare i dati sensibili all'interno delle applicazioni client, assicurandosi che le chiavi di crittografia non vengano mai esposte al motore di database. Questo garantisce una separazione tra chi possiede i dati e può visualizzarli e chi gestisce i dati ma non può accedervi, ovvero 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 alcune restrizioni, ad esempio l'impossibilità di eseguire operazioni sui dati crittografati, tra cui l'ordinamento, il filtro (ad eccezione delle ricerche di punti che usano la crittografia deterministica) e così via. Ciò 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. Sul lato 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 il riscontro di modelli, utilizzare operatori di confronto, ordinare e indicizzare colonne crittografate, è necessario implementare Always Encrypted con enclave sicura.
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 delle colonne viene utilizzata per crittografare i dati in una colonna crittografata. Una chiave master della colonna è una chiave di protezione delle chiavi che crittografa una o più chiavi di crittografia delle colonne.
È necessario archiviare le chiavi master della colonna in un archivio chiavi attendibile all'esterno del sistema di database, ad esempio Azure Key Vault, archivio certificati Di Windows o un modulo di sicurezza hardware. È quindi necessario effettuare il provisioning delle chiavi di crittografia della colonna e crittografare tutto con una chiave master della colonna.
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. Ciò può comportare la creazione di nuove tabelle con colonne crittografate o la crittografia delle colonne di database esistenti e dei dati esistenti. Quando si configura la crittografia per una colonna, si specificano le informazioni relative all'algoritmo di crittografia, alla chiave di crittografia della colonna usata per proteggere i dati nella colonna e al 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. L'uso della crittografia deterministica consente le ricerche di punti, join di uguaglianza, raggruppamento e indicizzazione di colonne crittografate. Tuttavia, può anche consentire a utenti non autorizzati di indovinare le informazioni sui valori crittografati esaminando i criteri presenti nella colonna crittografata, soprattutto in presenza di un set di possibili valori crittografati di dimensioni ridotte, ad esempio Vero/Falso o la regione 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. Ciò migliora la sicurezza della crittografia casuale.
Per eseguire criteri di ricerca usando operatori di confronto, ordinamento e indicizzazione su colonne crittografate, è consigliabile adottare Always Encrypted con enclave sicuri e applicare la crittografia casuale. La crittografia casuale Always Encrypted (senza enclave sicuri) non supporta la ricerca, il raggruppamento, l'indicizzazione o l'unione su colonne crittografate. Per le colonne destinate a scopi di ricerca o raggruppamento, è invece essenziale usare la crittografia deterministica. In questo modo è possibile eseguire operazioni quali ricerche di punti, join di uguaglianza, raggruppamento e indicizzazione in colonne crittografate.
Poiché il sistema di database non ha accesso alle chiavi crittografiche, qualsiasi crittografia di colonna richiede lo spostamento e la crittografia dei dati all'esterno del database. Questo significa che questo 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 Azure Data Studio o 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 assicurarsi che le chiavi di Always Encrypted e i dati sensibili protetti non siano mai rivelati all'ambiente di database in testo non crittografato, il motore di database non può essere coinvolto nel provisioning della chiave e nella crittografia o decrittazione dei dati. 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 sono consentiti calcoli sulle colonne crittografate tramite crittografia casuale. La crittografia deterministica supporta le operazioni seguenti che includono confronti di uguaglianza e non permette 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 confronti di pattern, ordinare e indicizzare le colonne crittografate, è necessario implementare Always Encrypted con enclave sicuri.
Le istruzioni di query che attivano calcoli che coinvolgono dati in testo non crittografato e dati crittografati che non sono consentite. 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 a una colonna crittografata (o viceversa) UPDATE, BULK INSERT, SELECT INTO o INSERT..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 char
Le 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, è necessario 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 Azure Data Studio o SSMS è essenziale applicare la parametrizzazione per le variabili Always Encrypted per eseguire query che gestiscono i valori associati alle colonne crittografate. Sono inclusi 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 seguenti clausole 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, alias, tipi definiti dall'utente.
- Colonne FILESTREAM
- Colonne con la proprietà IDENTITY .
- Colonne con proprietà ROWGUIDCOL .
- Colonne stringa (varchar, char e così via) con regole di confronto diverse dalle regole di confronto del punto di codice binario (_BIN2).
- 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 a cui fanno riferimento colonne calcolate (quando l'espressione esegue 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/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, non è possibile applicare la crittografia a una 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, incluso il gruppo 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 del linguaggio di definizione dei dati (DDL) | Descrizione |
---|---|
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. |
CREATE COLUMN ENCRYPTION KEY | 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. |
DROP COLUMN ENCRYPTION KEY | 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 di sistema e procedure memorizzate | Descrizione |
---|---|
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. |
Vedere anche sys.columns per informazioni sui metadati di crittografia archiviati per ogni colonna.
Autorizzazioni per il database
Esistono quattro autorizzazioni per database per Always Encrypted.
Viste del catalogo di sistema e procedure archiviate | Descrizione |
---|---|
ALTER ANY COLUMN MASTER KEY | (Obbligatorio per creare ed eliminare i metadati della chiave master della colonna). |
ALTERA QUALSIASI CHIAVE DI CRITTOGRAFIA DELLA COLONNA | (Obbligatorio per creare ed eliminare i metadati della chiave di crittografia della colonna). |
VISUALIZZARE LA DEFINIZIONE DELLA CHIAVE MASTER DI QUALSIASI COLONNA | Richiesta per accedere e leggere i metadati delle chiavi master della colonna, necessari per eseguire query sulle colonne crittografate. |
VISUALIZZARE QUALSIASI DEFINIZIONE DELLA CHIAVE DI CRITTOGRAFIA DELLA COLONNA | 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 | MODIFICARE QUALSIASI CHIAVE MASTER DI COLONNA | ALTER ANY COLUMN ENCRYPTION KEY | VISUALIZZARE QUALSIASI DEFINIZIONE DI CHIAVE MASTER DELLA COLONNA | VISUALIZZA QUALSIASI DEFINIZIONE DI CHIAVE DI CRITTOGRAFIA PER COLONNA |
---|---|---|---|---|
Gestione delle chiavi (creazione/modifica/revisione metadati delle chiavi nel database) | X | X | X | X |
Esecuzione di query in colonne crittografate | X | X |
Considerazioni importanti
Le autorizzazioni VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION sono necessarie quando si selezionano colonne crittografate, anche se l'utente non dispone dell'autorizzazione per le chiavi master della colonna (nei relativi archivi chiavi), proteggendo le colonne e non accede ai tentativi di testo non crittografato.
In SQL Server, entrambe le autorizzazioni VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION vengono concesse per impostazione predefinita al ruolo fisso di database public. Un amministratore di database può scegliere di revocare (o negare) le autorizzazioni al ruolo pubblico e concederle a ruoli o utenti specifici per implementare un controllo più limitato.
Nel database SQL le autorizzazioni VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION non vengono concesse per impostazione predefinita al ruolo predefinito del database pubblico . In questo modo, specifici strumenti esistenti (che usano le versioni precedenti di DacFx) funzionano correttamente. Per utilizzare le colonne crittografate (anche se non le decrittografa), un amministratore di database deve concedere in modo esplicito le autorizzazioni VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION .