Configurar criptografia de coluna in-loco com Transact-SQL
Aplica-se a: SQL Server 2019 (15.x) e versões posteriores (somente para Windows) Banco de Dados SQL do Azure
Este artigo descreve como executar operações de criptografia in-loco em colunas usando o Always Encrypted com enclaves seguros com a instrução ALTER TABLE/ALTER COLUMN
. Para obter informações básicas sobre a criptografia in-loco e pré-requisitos gerais, confira Configurar a criptografia de coluna in-loco usando o Always Encrypted com enclaves seguros.
Com a instrução ALTER TABLE
ou ALTER COLUMN
, você pode definir a configuração da criptografia de destino para uma coluna. Quando você executa a instrução, o enclave seguro do lado do servidor criptografa, criptografa novamente ou descriptografa os dados armazenados na coluna, dependendo da configuração de criptografia atual e de destino especificada na definição de coluna na instrução.
- Se a coluna não estiver criptografada no momento, ela será criptografada se você especificar a cláusula
ENCRYPTED WITH
na definição de coluna. - Se a coluna estiver criptografada no momento, ela será descriptografada (convertida em uma coluna de texto não criptografado) se você não especificar a cláusula
ENCRYPTED WITH
na definição de coluna. - Se a coluna estiver criptografada no momento, ela será criptografada novamente se você especificar a cláusula
ENCRYPTED WITH
e o tipo de criptografia de coluna especificada ou a chave de criptografia de coluna forem diferentes do tipo de criptografia ou da chave de criptografia de coluna usada no momento.
Observação
Não é possível combinar operações criptográficas com outras alterações em apenas uma instrução ALTER TABLE
/ALTER COLUMN
, exceto para alterar a coluna para NULL
ou NOT NULL
ou, então, para alterar uma ordenação. Por exemplo, não é possível criptografar uma coluna E alterar um tipo de dados da coluna em uma única instrução ALTER TABLE
/ALTER COLUMN
do Transact-SQL. É necessário usar duas instruções separadas.
Como qualquer consulta que usa um enclave seguro no lado do servidor, uma instrução ALTER TABLE
/ALTER COLUMN
que dispara a criptografia in-loco deve ser enviada por uma conexão com o Always Encrypted e os cálculos de enclave habilitados.
O restante deste artigo descreve como disparar a criptografia in-loco usando a instrução ALTER TABLE
/ALTER COLUMN
do SQL Server Management Studio. Como alternativa, você pode emitir ALTER TABLE
/ALTER COLUMN
do Azure Data Studio ou do aplicativo.
Observação
Atualmente, o cmdlet Invoke-Sqlcmd no módulo do SqlServer do PowerShell e sqlcmd não dão suporte ao uso de ALTER TABLE
/ALTER COLUMN
para operações criptográficas in-loco.
Executar a criptografia in-loco com o Transact-SQL no SSMS
Pré-requisitos
- Pré-requisitos descritos em Configurar a criptografia de coluna in-loco usando o Always Encrypted com enclaves seguros.
- Baixe a versão mais recente em disponibilidade geral (GA) do SQL Server Management Studio (SSMS).
Etapas
Abra uma janela de consulta com Always Encrypted e cálculos de enclave habilitados na conexão de banco de dados. Para obter detalhes, confira Habilitando e desabilitando o Always Encrypted para uma conexão de banco de dados.
Na janela de consulta, emita a instrução
ALTER TABLE
/ALTER COLUMN
, especificando a configuração de criptografia de destino para uma coluna que você deseja criptografar, descriptografar ou criptografar novamente. Se você estiver criptografando ou criptografando novamente a coluna, use a cláusulaENCRYPTED WITH
. Se a coluna for de cadeia de caracteres (por exemplo,char
,varchar
,nchar
,nvarchar
), você também precisará alterar a ordenação para uma ordenação BIN2.Observação
Se a chave mestra de coluna estiver armazenada no Azure Key Vault, talvez seja solicitado que você entre no Azure.
Limpe o cache do plano para todos os lotes e procedimentos armazenados que acessam a tabela, para atualizar as informações de criptografia de parâmetros.
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Observação
Se você não remover o plano da consulta afetada do cache, a primeira execução da consulta após a criptografia poderá falhar.
Use
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
ouDBCC FREEPROCCACHE
para limpar o cache de planos com cuidado, pois isso pode resultar na degradação temporária do desempenho de consulta. Para minimizar o impacto negativo da limpeza do cache, você pode remover seletivamente somente os planos das consultas afetadas.Chame sp_refresh_parameter_encryption para atualizar os metadados dos parâmetros de cada módulo (procedimento armazenado, função, exibição, gatilho) que persistiu em sys.parameters e possa ter sido invalidado criptografando as colunas.
Exemplos
Criptografar uma coluna in-loco
O exemplo abaixo pressupõe que:
CEK1
é uma chave de criptografia de coluna habilitada para enclave.- A coluna
SSN
é de texto sem formatação e atualmente está usando a ordenação de banco de dados padrão, como uma ordenação Latin1, não BIN2 (por exemplo,Latin1_General_CI_AI_KS_WS
).
A instrução criptografa a coluna SSN
usando criptografia determinística e a chave de criptografia de coluna habilitada para enclave in-loco. Ela também substitui a ordenação do banco de dados padrão pela ordenação BIN2 correspondente (na mesma página de código).
A operação é executada online (ONLINE = ON
). Observe também que a chamada para ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE
, que recria os planos das consultas, é afetada pela alteração do esquema de tabela.
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
Criptografar novamente uma coluna in-loco para alterar o tipo de criptografia
O exemplo abaixo pressupõe que:
- A coluna
SSN
foi criptografada usando criptografia determinística e uma chave de criptografia de coluna habilitada para enclave,CEK1
. - A ordenação atual, definida no nível da coluna, é
Latin1_General_BIN2
.
A instrução abaixo criptografa novamente a coluna usando criptografia aleatória e a mesma chave (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
Criptografar novamente uma coluna in-loco para girar uma chave de criptografia de coluna
O exemplo abaixo pressupõe que:
- A coluna
SSN
foi criptografada usando criptografia aleatória e uma chave de criptografia de coluna habilitada para enclave,CEK1
. CEK2
é uma chave de criptografia de coluna habilitada para enclave (diferente deCEK1
).- A ordenação atual, definida no nível da coluna, é
Latin1_General_BIN2
.
A instrução abaixo criptografa novamente a coluna com 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
Descriptografar uma coluna no local
O exemplo abaixo pressupõe que:
- A coluna
SSN
foi criptografada usando uma chave de criptografia de coluna habilitada para enclave. - A ordenação atual, definida no nível da coluna, é
Latin1_General_BIN2
.
A instrução abaixo descriptografa a coluna e mantém a ordenação inalterada. Como alternativa, você pode optar por alterar a ordenação. Por exemplo, altere a ordenação para uma ordenação não BIN2 na mesma instrução.
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
Próximas etapas
- Executar instruções Transact-SQL usando os enclaves seguros
- Criar e usar índices em colunas usando o Always Encrypted com enclaves seguros
- Desenvolver aplicativos usando o Always Encrypted com enclaves seguros
Confira também
- Solução de problemas comuns do Always Encrypted com enclaves seguros
- Configurar a criptografia de coluna in-loco usando o Always Encrypted com enclaves seguros
- Habilitar o Always Encrypted com enclaves seguros para as colunas criptografadas existentes
- Tutorial: Introdução ao uso de Always Encrypted com enclaves seguros