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 2019 (15.x) e versioni successive - Solo Windows
Database SQL di Azure
Questo articolo descrive come eseguire operazioni di crittografia direttamente sulle colonne utilizzando Always Encrypted con un enclave sicuro con l'istruzione ALTER TABLE/ALTER COLUMN
. Per informazioni di base sulla crittografia sul posto e sui prerequisiti generali, vedere Configurare la crittografia delle colonne sul posto usando Always Encrypted con enclave sicuri.
Con l'istruzione ALTER TABLE
o ALTER COLUMN
, è possibile impostare la configurazione della crittografia di destinazione per una colonna. Quando si esegue l'istruzione, l'enclave sicuro lato server crittografa, crittografa nuovamente o decrittografa i dati archiviati nella colonna, a seconda della configurazione della crittografia corrente e di destinazione, specificata nella definizione della colonna nell'istruzione.
- Se la colonna non è attualmente crittografata, verrà crittografata se si specifica la clausola
ENCRYPTED WITH
nella definizione della colonna. - Se la colonna è attualmente crittografata, verrà decrittografata (convertita in una colonna di testo non crittografato), se non si specifica la clausola
ENCRYPTED WITH
nella definizione della colonna. - Se la colonna è attualmente crittografata, verrà crittografata nuovamente se si specifica la clausola
ENCRYPTED WITH
e il tipo di crittografia di colonna specificato o la chiave di crittografia di colonna è diversa dal tipo di crittografia o dalla chiave di crittografia di colonna attualmente usata.
Nota
Non è possibile combinare operazioni di crittografia con altre modifiche in una singola istruzione ALTER TABLE
/ALTER COLUMN
, tranne l'impostazione della colonna su NULL
o NOT NULL
oppure la modifica di una regola di confronto. Ad esempio, non è possibile crittografare una colonna E modificare un tipo di dati della colonna in un'unica istruzione Transact-SQL ALTER TABLE
/ALTER COLUMN
. Usa due istruzioni separate.
Come qualsiasi altra query che utilizza un enclave sicuro lato server, un'istruzione ALTER TABLE
/ALTER COLUMN
che attiva la crittografia sul posto deve essere trasmessa attraverso una connessione con Always Encrypted e i calcoli dell'enclave attivati.
Nel resto dell'articolo viene descritto come attivare la crittografia sul posto usando l'istruzione ALTER TABLE
/ALTER COLUMN
da SQL Server Management Studio. In alternativa, è possibile eseguire ALTER TABLE
/ALTER COLUMN
da Azure Data Studio o dall'applicazione.
Nota
Attualmente, il cmdlet Invoke-Sqlcmd nel modulo di PowerShell SqlServer e sqlcmd non supportano l'uso di ALTER TABLE
/ALTER COLUMN
per le operazioni di crittografia sul posto.
Eseguire la crittografia sul posto con Transact-SQL in SSMS
Prerequisiti
- Prerequisiti descritti in Configurare la crittografia delle colonne sul posto usando Always Encrypted con enclave sicuri.
- Scaricare la versione in disponibilità generale più recente di SQL Server Management Studio (SSMS).
Passaggi
Apri una finestra di query con Always Encrypted e i calcoli dell'enclave abilitati nella connessione al database. Per informazioni dettagliate, vedere Abilitazione e disabilitazione di Always Encrypted per una connessione di database.
Nella finestra di query eseguire l'istruzione
ALTER TABLE
/ALTER COLUMN
specificando la configurazione di crittografia di destinazione per una colonna da crittografare, decrittografare o crittografare di nuovo. Per crittografare o crittografare nuovamente la colonna, usare laENCRYPTED WITH
clausola. Se la colonna è una colonna di tipo stringa (ad esempio,char
,varchar
,nchar
,nvarchar
), potrebbe anche essere necessario modificare le regole di confronto impostando regole di confronto BIN2.Nota
Se la chiave master della colonna è archiviata in Azure Key Vault, potrebbe essere richiesto di accedere ad Azure.
Cancellare la cache dei piani per tutti i batch e le stored procedure che accedono alla tabella, in modo da aggiornare le informazioni di crittografia dei parametri.
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Nota
Se non si rimuove il piano per la query interessata dalla cache, la prima esecuzione della query dopo la crittografia potrebbe non riuscire.
Per cancellare attentamente la cache dei piani, utilizzare
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
oDBCC FREEPROCCACHE
, poiché ciò potrebbe comportare una temporanea riduzione delle prestazioni delle query. Per ridurre al minimo l'impatto negativo della cancellazione della cache, è possibile rimuovere selettivamente i piani solo per le query interessate.Chiamare sp_refresh_parameter_encryption per aggiornare i metadati per i parametri di ogni modulo (stored procedure, funzione, vista, trigger) memorizzati in sys.parameters e che potrebbero essere stati invalidati in seguito alla crittografia delle colonne.
Esempi
Crittografia di una colonna sul posto
L'esempio seguente presuppone che:
-
CEK1
è una chiave di crittografia di colonna abilitata per l'enclave. - La colonna
SSN
è testo non crittografato e usa attualmente le regole di confronto predefinite del database, come Latin1, con regole non-BIN2 (ad esempio,Latin1_General_CI_AI_KS_WS
).
L'istruzione crittografa la colonna SSN
usando la crittografia deterministica e la chiave di crittografia di colonna abilitata per l'enclave direttamente. Sovrascrive anche le regole di confronto del database predefinite con regole di confronto BIN2 corrispondenti (nella stessa pagina di codice).
L'operazione viene eseguita online (ONLINE = ON
). Si noti anche la chiamata a ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
, che ricrea i piani delle query interessate dalla modifica dello schema di tabella.
ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
WITH
(ONLINE = ON);
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO
Crittografare nuovamente una colonna sul posto per modificare il tipo di crittografia
L'esempio seguente presuppone che:
- La colonna
SSN
è crittografata con la crittografia deterministica e una chiave di crittografia di colonna abilitata all'enclave,CEK1
. - Le regole di confronto correnti, impostate a livello di colonna, sono
Latin1_General_BIN2
.
L'istruzione seguente crittografa nuovamente la colonna usando la crittografia casuale e la stessa chiave (CEK1
)
ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1]
, ENCRYPTION_TYPE = Randomized
, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO
Crittografare nuovamente una colonna direttamente per ruotare una chiave di crittografia della colonna
L'esempio seguente presuppone che:
- La colonna
SSN
è crittografata usando la crittografia randomizzata e una chiave di crittografia di colonna abilitata per l'enclave,CEK1
. -
CEK2
è una chiave di crittografia per colonna abilitata per l'enclave (diversa daCEK1
). - Le regole di confronto correnti, impostate a livello di colonna, sono
Latin1_General_BIN2
.
L'istruzione seguente crittografa nuovamente la colonna con CEK2
.
ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK2]
, ENCRYPTION_TYPE = Randomized
, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO
Decrittografare una colonna sul posto
L'esempio seguente presuppone che:
- La colonna
SSN
venga crittografata con una chiave di crittografia di colonna abilitata per l'enclave. - L'attuale collatione, impostata a livello di colonna, è
Latin1_General_BIN2
.
La dichiarazione seguente decrittografa la colonna e mantiene invariata la collazione. In alternativa, è possibile scegliere di modificare le regole di confronto. Sostituire ad esempio le regole di confronto con regole di confronto non BIN2 nella stessa istruzione.
ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
WITH (ONLINE = ON);
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO
Passaggi successivi
- Eseguire istruzioni Transact-SQL con enclave sicure
- Creare e usare indici in colonne usando Always Encrypted con enclave sicuri
- Sviluppare applicazioni usando Always Encrypted con enclave sicuri
Vedi anche
- Risolvere i problemi comuni per Always Encrypted con enclave sicure
- Configurare la crittografia delle colonne sul posto usando "Always Encrypted" con enclave sicure
- Abilitare Always Encrypted con enclave sicuri per le colonne crittografate esistenti
- Esercitazione: Introduzione ad Always Encrypted con enclave sicuri