Configurare la crittografia delle colonne sul posto con Transact-SQL
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 sul posto sulle colonne che usano Always Encrypted con enclave sicuri 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
. Usare due istruzioni separate.
Come qualsiasi query che usa un enclave sicuro lato server, un'istruzione ALTER TABLE
/ALTER COLUMN
che attiva la crittografia sul posto deve essere inviata tramite una connessione con Always Encrypted e i calcoli dell'enclave abilitati.
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
Aprire una finestra di query con Always Encrypted e i calcoli dell'enclave abilitati nella connessione di 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 per aggiornare le informazioni di crittografia dei parametri.
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Nota
Se non si rimuove il piano per le query interessate dalla cache, la prima esecuzione della query dopo la crittografia potrebbe non riuscire.
Usare
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
oDBCC FREEPROCCACHE
per cancellare la cache dei piani con attenzione, perché ciò potrebbe comportare una temporanea riduzione del livello 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) persistente in sys.parameters e che potrebbe risultare invalidato in seguito alla crittografia delle colonne.
Esempi
Crittografia di una colonna sul posto
L'esempio seguente presuppone che:
CEK1
sia una chiave di crittografia di colonna abilitata per l'enclave.- La colonna
SSN
sia di testo non crittografato e usi attualmente le regole di confronto del database predefinite, come Latin1 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 sul posto. Sovrascrive anche le regole di confronto del database predefinite con regole di confronto BIN2 corrispondenti (nella stessa tabella codici).
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
sia crittografata con la crittografia deterministica e una chiave di crittografia di colonna abilitata per l'enclave,CEK1
. - Le regole di confronto correnti, impostate a livello di colonna, siano
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 sul posto per ruotare una chiave di crittografia di colonna
L'esempio seguente presuppone che:
- La colonna
SSN
venga crittografata usando la crittografia casuale e una chiave di crittografia di colonna abilitata per l'enclave,CEK1
. CEK2
sia una chiave di crittografia di colonna abilitata per l'enclave (diversa daCEK1
).- Le regole di confronto correnti, impostate a livello di colonna, siano
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 un colonna sul posto
L'esempio seguente presuppone che:
- La colonna
SSN
venga crittografata con una chiave di crittografia di colonna abilitata per l'enclave. - Le regole di confronto correnti, impostate a livello di colonna, siano
Latin1_General_BIN2
.
L'istruzione seguente decrittografa la colonna e mantiene invariate le regole di confronto. 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 sicuri
- Abilitare Always Encrypted con enclave sicuri per le colonne crittografate esistenti
- Esercitazione: Introduzione ad Always Encrypted con enclave sicuri