Eventi
31 mar, 23 - 2 apr, 23
Il più grande evento di apprendimento di SQL, Infrastruttura e Power BI. 31 marzo - 2 aprile. Usare il codice FABINSIDER per salvare $400.
Registrati oggiQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare le funzionalità più recenti, gli aggiornamenti della sicurezza e il supporto tecnico.
Si applica a: SQL Server 2019 (15.x) e versioni successive -
Database SQL di Azure solo Windows
Always Encrypted con enclave sicure espande le funzionalità di confidential computing di Always Encrypted abilitando la crittografia sul posto e query riservate più avanzate. Always Encrypted con enclave sicure è disponibile in SQL Server 2019 (15.x) e versioni successive, nonché in database SQL di Azure.
Introdotta in database SQL di Azure nel 2015 e in SQL Server 2016 (13.x), Always Encrypted protegge la riservatezza dei dati sensibili da malware e utenti non autorizzati con privilegi elevati: Amministratori di database (DBA), amministratori di computer, amministratori cloud o chiunque altro abbia accesso legittimo a istanze del server, hardware e così via, ma non dovrebbe avere accesso ad alcuni o a tutti i dati effettivi.
Senza i miglioramenti illustrati in questo articolo, Always Encrypted protegge i dati crittografandoli sul lato client e non consentendo mai ai dati o alle chiavi di crittografia corrispondenti di essere visualizzati come testo non crittografato all'interno del motore di database. Di conseguenza, le funzionalità per le colonne crittografate all'interno del database sono soggette a notevoli restrizioni. Le uniche operazioni che il motore di database può eseguire sui dati crittografati sono i confronti di uguaglianza (disponibili solo con la crittografia deterministica). Tutte le altre operazioni, tra cui le operazioni di crittografia (crittografia dei dati iniziale o rotazione delle chiavi) e le query più avanzate (ad esempio, i criteri di ricerca), non sono supportate all'interno del database. Gli utenti devono spostare i dati all'esterno del database per eseguire queste operazioni sul lato client.
Always Encrypted con enclave sicure supera queste limitazioni, consentendo l'esecuzione di alcuni calcoli su dati di testo non crittografato all'interno di un'enclave sicura sul lato server. Un'enclave sicura è un'area protetta della memoria all'interno del processo del motore di database. L'enclave sicura viene visualizzata come black box per il resto del motore di database e altri processi nel computer host. Non vi è alcun modo per visualizzare dati o codice all'interno dell'enclave dall'esterno, anche con un debugger. Queste proprietà rendono l'enclave sicura un ambiente di esecuzione attendibile che può accedere in modo sicuro alle chiavi crittografiche e ai dati sensibili in testo non crittografato, senza compromettere la riservatezza dei dati.
Always Encrypted usa gli enclave sicuri come illustrato nel diagramma seguente:
Durante l'analisi di un'istruzione Transact-SQL inviata da un'applicazione, il motore di database determina se l'istruzione contiene operazioni su dati crittografati che richiedono l'uso dell'enclave sicura. Per tali istruzioni:
Il driver client invia le chiavi di crittografia della colonna necessarie per le operazioni all'enclave sicura (tramite un canale sicuro) e invia l'istruzione per l'esecuzione.
Durante l'elaborazione dell'istruzione, il motore di database delega le operazioni di crittografia o i calcoli sulle colonne crittografate all'enclave sicura. Se necessario, l'enclave decrittografa i dati ed esegue i calcoli in testo non crittografato.
Durante l'elaborazione dell'istruzione, sia i dati che le chiavi di crittografia della colonna non vengono esposte come testo non crittografato nel motore di database al di fuori dell'enclave sicura.
Per usare Always Encrypted con enclave sicuri, un'applicazione deve usare un driver client che supporta la funzionalità. Configurare l'applicazione e il driver client per abilitare i calcoli dell'enclave e l'attestazione dell'enclave (vedere la sezione Attestazione delle enclave sicure di seguito). Per informazioni dettagliate, incluso l'elenco dei driver client supportati, vedere Sviluppare applicazioni con Always Encrypted.
Always Encrypted supporta le seguenti tecnologie delle enclave (o tipi di enclave):
Il tipo di enclave disponibile per il database dipende dal prodotto SQL che lo ospita (database SQL di Azure vs. SQL Server) e, nel caso di database SQL di Azure, dalla configurazione del database.
In SQL Server 2019 (15.x) e versioni successive, Always Encrypted supporta le enclave VBS. Le enclave Intel SGX non sono supportate.
In database SQL di Azure, un database può usare un'enclave Intel SGX o un'enclave VBS a seconda dell'hardware in cui il database è configurato per l'esecuzione:
Nota
Le enclave VBS sono attualmente disponibili in tutte le aree del database SQL di Azure tranne Jio India centrale.
Per informazioni importanti sulla protezione del livello fornita da ogni tipo di enclave, vedere la sezione Considerazioni sulla sicurezza.
L'attestazione dell'enclave è un meccanismo di difesa avanzata che consente di rilevare gli attacchi che comportano manomissioni con il codice dell'enclave o il relativo ambiente da parte di amministratori malintenzionati.
L'attestazione dell'enclave consente a un'applicazione client di stabilire una certa fiducia nell'enclave sicura per il database a cui l'applicazione è connessa prima che l'app usi l'enclave per l'elaborazione di dati sensibili. Il flusso di lavoro di attestazione verifica che l'enclave sia un'enclave VBS o Intel SGX originale e che il codice in esecuzione all'interno sia il catalogo originale dell'enclave firmato da Microsoft per Always Encrypted. Durante l'attestazione, sia il driver client all'interno dell'applicazione che il motore di database comunicano con un servizio di attestazione esterno usando un endpoint specificato dal client.
Always Encrypted può usare uno dei due servizi di attestazione:
Per abilitare Always Encrypted con enclave sicure per l'applicazione, è necessario impostare un protocollo di attestazione nella configurazione del driver client nell'applicazione. Un valore del protocollo di attestazione determina se 1) l'app client userà l'attestazione e, in tal caso, 2) specifica il tipo del servizio di attestazione da usare. La tabella seguente acquisisce i protocolli di attestazione supportati per le combinazioni valide di prodotti e tipi di enclave SQL:
Prodotto per l'hosting | Tipo di enclave | Protocolli di attestazione supportati |
---|---|---|
SQL Server 2019 (15.x) e versioni successive | Enclave VBS | HGS, nessuna attestazione |
Database SQL di Azure | Enclave SGX (database della serie DC) | Attestazione di Microsoft Azure |
Database SQL di Azure | Enclave VBS | Nessuna attestazione |
Alcuni punti importanti da chiarire:
Per altre informazioni, vedi:
Always Encrypted con enclave sicuri introduce il concetto di chiavi abilitate per l'enclave:
master
della colonna ENCLAVE_COMPUTATIONS
con la proprietà master
specificata nell'oggetto metadati chiave master della colonna all'interno del database. L'oggetto metadati chiave master della master
colonna deve anche contenere una firma valida delle proprietà dei metadati. Per altre informazioni, vedere CREATE COLUMN MASTER KEY (Transact-SQL).master
. Solo le chiavi di crittografia di colonna abilitata per l'enclave possono essere usate per i calcoli all'interno dell'enclave sicura.Per altre informazioni, vedere Gestire le chiavi per Always Encrypted con enclave sicuri.
Una colonna abilitata per l'enclave è una colonna del database crittografata con una chiave di crittografia di colonna abilitata per l'enclave.
I due principali vantaggi di Always Encrypted con le enclave sicure sono la crittografia sul posto e le query riservate avanzate.
La crittografia sul posto consente di eseguire operazioni crittografiche sulle colonne del database all'interno dell'enclave sicura, senza spostare i dati all'esterno del database. La crittografia sul posto migliora le prestazioni e l'affidabilità delle operazioni di crittografia. È possibile eseguire la crittografia sul posto usando l'istruzione ALTER TABLE (Transact-SQL).
Le operazioni crittografiche supportate sul posto sono:
La crittografia sul posto è consentita sia con la crittografia deterministica che con quella casuale, purché le chiavi di crittografia della colonna usate in un'operazione di crittografia siano abilitate per l'enclave.
Nota
SQL Server 2022 (16.x) aggiunge supporto aggiuntivo per le query riservate con operazioni JOIN, GROUP BY e ORDER BY sulle colonne crittografate.
Le query riservate sono query DML che comportano operazioni sulle colonne abilitate per l'enclave, eseguite all'interno dell'enclave sicura.
Le operazioni supportate all'interno delle enclave sicure sono:
Operazione | Database SQL di Azure | SQL Server 2022 (16.x) | SQL Server 2019 (15.x) |
---|---|---|---|
Operatori di confronto | Supportata | Supportata | Supportata |
BETWEEN (Transact-SQL) | Supportata | Supportata | Supportata |
IN (Transact-SQL) | Supportata | Supportata | Supportata |
LIKE (Transact-SQL) | Supportata | Supportata | Supportata |
DISTINCT | Supportata | Supportata | Supportata |
Join | Supportata | Supportata | Sono supportati solo i join annidati di cicli |
SELECT - ORDER BY Clause (Transact-SQL) | Supportata | Supportata | Non supportato |
SELECT - GROUP BY- Transact-SQL | Supportata | Supportata | Non supportato |
Nota
Le operazioni precedenti all'interno di enclave sicure richiedono la crittografia casuale. La crittografia deterministica non è supportata. Il confronto di uguaglianza rimane l'operazione disponibile per le colonne che usano la crittografia deterministica.
Il livello di compatibilità del database deve essere impostato su SQL Server 2022 (160) o superiore.
Nel database SQL di Azure e in SQL Server 2022 (16.x), le query riservate che usano enclave su una colonna di stringhe di caratteri (char
, nchar
) richiedono che la colonna usi regole di confronto del punto di codice binario (_BIN2) o UTF-8. In SQL Server 2019 (15.x) sono necessarie regole di confronto a_BIN2.
Per ulteriori informazioni, vedere Eseguire istruzioni Transact-SQL con enclave sicure.
È possibile creare indici non cluster sulle colonne abilitate per l'enclave tramite la crittografia casuale per velocizzare l'esecuzione delle query DML riservate che usano l'enclave sicura.
Per garantire che un indice su una colonna crittografata tramite la crittografia casuale non determini una perdita di dati sensibili, i valori di chiave nella struttura dei dati di indice (albero B) sono crittografati e ordinati in base ai relativi valori di testo non crittografato. L'ordinamento in base al valore di testo non crittografato è utile anche per l'elaborazione di query all'interno dell'enclave. Quando l'executor delle query nel motore di database usa un indice su una colonna crittografata per i calcoli all'interno dell'enclave, esegue una ricerca nell'indice dei valori specifici archiviati nella colonna. Ogni ricerca può implicare più confronti. L'utilità di esecuzione query delega ogni confronto all'enclave, che decrittografa un valore archiviato nella colonna e il valore della chiave di indice crittografata da confrontare, esegue il confronto in testo non crittografato e restituisce il risultato del confronto all'utilità di esecuzione.
La creazione di indici su colonne che usano la crittografia casuale e non sono abilitate per l'enclave non è supportata.
Un indice su una colonna con crittografia deterministica è ordinato in base al testo crittografato (non al testo non crittografato), indipendentemente dal fatto che la colonna sia abilitata per l'enclave o meno.
Per altre informazioni, vedere Creare e usare indici in colonne usando Always Encrypted con enclave sicuri. Per informazioni generali sul funzionamento dell'indicizzazione nel motore di database, vedere l'articolo Descrizione di indici cluster e non cluster.
Se si verifica un errore in un'istanza di SQL Server, i relativi database possono rimanere in uno stato in cui i file di dati possono contenere alcune modifiche da transazioni incomplete. Quando l'istanza viene avviata, viene eseguito un processo denominato ripristino del database, che implica il rollback di tutte le transazioni incomplete rilevate nel log delle transazioni per salvaguardare l'integrità del database. Se una transazione incompleta ha apportato modifiche a un indice, anche tali modifiche devono essere annullate. Ad esempio, potrebbe essere necessario rimuovere o reinserire alcuni valori di chiave nell'indice.
Importante
Microsoft consiglia di abilitare il ripristino accelerato del database nel database prima di creare il primo indice su una colonna abilitata per l'enclave crittografata con la crittografia casuale. AdR è abilitato per impostazione predefinita nel database SQL di Azure e in Istanza gestita di SQL di Azure. AdR è disponibile ma non abilitato per impostazione predefinita in SQL Server 2019 (15.x) e versioni successive.
Con il processo di ripristino del database tradizionale (che segue il modello di recupero ARIES), per annullare una modifica a un indice, il Motore del Database deve attendere fino a quando un'applicazione non fornisce la chiave di crittografia della colonna all'interno dell'enclave, che può richiedere molto tempo. Il ripristino accelerato del database riduce notevolmente il numero di operazioni della fase di rollback che devono essere rinviate perché una chiave di crittografia della colonna non è disponibile nella cache all'interno dell'enclave. Di conseguenza, aumenta notevolmente la disponibilità del database riducendo al minimo la possibilità che una nuova transazione venga bloccata. Con ADR abilitato, il motore di database potrebbe avere ancora bisogno di una chiave di crittografia della colonna per completare la pulizia delle versioni dei dati precedenti, ma come attività in background che non influisce sulla disponibilità del database o delle transazioni utente. Potrebbero essere visualizzati messaggi di errore nel log degli errori, che indicano operazioni di pulizia non riuscite a causa di una chiave di crittografia della colonna mancante.
Le considerazioni sulla sicurezza seguenti si applicano ad Always Encrypted con enclave sicuri.
master
della colonna o le chiavi di crittografia della colonna con gli amministratori di database. Un amministratore di database può gestire gli indici nelle colonne crittografate senza avere accesso diretto alle chiavi, sfruttando la cache delle chiavi di crittografia della colonna all'interno dell'enclave.Quando si configura una soluzione di disponibilità elevata o di ripristino di emergenza per un database che usa Always Encrypted con enclave sicure, verificare che tutte le repliche del database possano usare un'enclave sicura. Se è disponibile un'enclave per la replica primaria, ma non per la replica secondaria, eventuali istruzioni che provano a usare la funzionalità di Always Encrypted con enclave sicure avranno esito negativo dopo il failover.
Quando si esegue la copia o la migrazione di un database che usa Always Encrypted con enclave sicure, verificare che l'ambiente di destinazione supporti sempre le enclave. In caso contrario, le istruzioni che usano le enclave non funzioneranno sulla copia o sul database di cui è stata eseguita la migrazione.
Occorre tenere presenti queste considerazioni specifiche:
SQL Server
Database SQL di Azure
Sia in SQL Server che nel database SQL di Azure, quando si esegue la migrazione del database tramite un file con estensione bacpac, è necessario accertarsi di eliminare tutti gli indici per le colonne abilitate per l'enclave con crittografia casuale prima di creare il file con estensione bacpac.
Always Encrypted con enclave sicure risolve alcune limitazioni di Always Encrypted supportando la crittografia sul posto e query riservate più avanzate con indici, come illustrato in Funzionalità di confidential computing per le colonne abilitate per l'enclave.
Tutte le altre limitazioni per Always Encrypted elencate in Limitazioni si applicano anche ad Always Encrypted con enclave sicure.
Le limitazioni seguenti sono specifiche per Always Encrypted con enclave sicuri:
ALTER TABLE
/ALTER COLUMN
. Usare due istruzioni separate.nchar[n]
e nvarchar[n]
, se n è maggiore di 3967.char[n]
, varchar[n]
, binary[n]
, varbinary[n]
, se n è maggiore di 7935.master
della colonna abilitate per l'enclave sono Archivio certificati Windows e Azure Key Vault.ALTER TABLE
/ALTER COLUMN
, è necessario eseguire l'istruzione in un intervallo di query in SSMS o in Azure Data Studio, oppure è possibile scrivere un programma personalizzato che esegue l'istruzione. Attualmente, il cmdlet Set-SqlColumnEncryption
nel modulo SqlServer di PowerShell e la procedura guidata di Always Encrypted in SQL Server Management Studio non supportano la crittografia sul posto. Spostare i dati dal database per le operazioni di crittografia, anche se le chiavi di crittografia della colonna usate per le operazioni sono abilitate per l'enclave.Eventi
31 mar, 23 - 2 apr, 23
Il più grande evento di apprendimento di SQL, Infrastruttura e Power BI. 31 marzo - 2 aprile. Usare il codice FABINSIDER per salvare $400.
Registrati oggiTraining
Certificazione
Microsoft Certified: Azure Database Administrator Associate - Certifications
Amministrare un'infrastruttura di database SQL Server per database relazionali, ibridi, locali e cloud con le offerte di database relazionali Microsoft PaaS.
Documentazione
Panoramica di Always Encrypted, che supporta la crittografia lato client trasparente e il confidential computing in SQL Server e nel database SQL di Azure
Esercitazione: Introduzione a Always Encrypted - SQL Server
Questa esercitazione illustra come crittografare le colonne usando Always Encrypted e come eseguire query su colonne crittografate in SQL Server, Database SQL di Azure e Istanza gestita di SQL di Azure.
Panoramica della gestione delle chiavi per Always Encrypted - SQL Server
Informazioni su come gestire i due tipi di chiavi crittografiche usati da Always Encrypted per proteggere i dati in SQL Server: chiave di crittografia della colonna e chiave master della colonna.