Usar o Conector do SQL Server com recursos de criptografia do SQL
Aplica-se: SQL Server
As atividades comuns de criptografia do SQL Server que usam uma chave assimétrica protegida pelo Azure Key Vault incluem as três áreas a seguir.
Transparent Data Encryption usando uma chave assimétrica do Cofre de Chaves do Azure
Criptografia de backups usando uma chave assimétrica do Key Vault
Criptografia de nível de coluna usando uma chave assimétrica do Key Vault
Concluir as partes I a IV do tópico Setup Steps for Extensible Key Management Using the Azure Key Vault(Etapas de instalação para o gerenciamento extensível de chaves usando o Cofre de Chaves do Azure), antes continuar com as etapas nesse tópico.
Observação
Versões 1.0.0.440 e anteriores foram substituídas e não têm mais suporte em ambientes de produção. Atualize para a versão 1.0.1.0 ou posterior visitando o Centro de Download da Microsoft e usando as instruções da página Manutenção e solução de problemas do Conector do SQL Server em "Atualização do Conector do SQL Server".
Observação
O Microsoft Entra ID era conhecido como Azure Active Directory (Azure AD).
Transparent Data Encryption usando uma chave assimétrica do Cofre de Chaves do Azure
Depois de concluir as Partes I a IV do tópico Setup Steps for Extensible Key Management Using the Azure Key Vault (Etapas de instalação para o gerenciamento extensível de chaves usando o Cofre de Chaves do Azure), use a chave de Cofre de Chaves do Azure para criptografar a chave de criptografia do banco de dados usando TDE. Para obter mais informações sobre a rotação de chaves usando o PowerShell, confira Girar o protetor de TDE (Transparent Data Encryption) usando PowerShell.
Importante
Não exclua as versões anteriores da chave após uma substituição. Quando as teclas são substituídas, alguns dados ainda são criptografados com as chaves anteriores, como backups de banco de dados mais antigos, arquivos de log de backup e arquivos de log de transações.
Você precisará criar uma credencial e um logon e criar uma chave de criptografia do banco de dados que fará criptografia dos dados e logs no banco de dados. Para criptografar um banco de dados a permissão CONTROL é exigida no banco de dados. O gráfico a seguir mostra a hierarquia da chave de criptografia ao usar o Cofre de Chaves do Azure.
Criar uma credencial do SQL Server para uso pelo mecanismo de banco de dados para TDE
O mecanismo de banco de dados usa as credenciais do aplicativo Microsoft Entra para acessar o Cofre de Chaves durante o carregamento de banco de dados. É recomendável criar outra ID do cliente e Segredo, conforme descrito na Etapa 1, para o Mecanismo de Banco de Dados, para limitar as permissões de Cofre de Chaves que são concedidas.
Modifique o script de Transact-SQL abaixo das seguintes maneiras:
Edite o argumento
IDENTITY
(ContosoDevKeyVault
) para apontar para o Cofre de Chaves do Azure.- Se você estiver usando o Azure global, substitua o argumento
IDENTITY
pelo nome do seu Azure Key Vault da Parte II. - Se você estiver usando uma nuvem privada do Azure (por ex., Azure Governamental, Azure operado pela 21Vianet ou Azure Alemanha), substitua o argumento
IDENTITY
pelo URI do Cofre retornado na Parte II, etapa 3. Não inclua “https://” no URI do Cofre.
- Se você estiver usando o Azure global, substitua o argumento
Mude a primeira parte do argumento
SECRET
pela ID do cliente do aplicativo Microsoft Entra da Etapa 1. Nesse exemplo, a ID do Cliente éEF5C8E094D2A4A769998D93440D8115D
.Importante
É necessário remover os hifens da ID do Cliente.
Conclua a segunda parte do argumento
SECRET
com o Segredo do Cliente da Parte I. Neste exemplo, o Segredo do Cliente da Parte 1 éReplaceWithAADClientSecret
.A cadeia de caracteres final do argumento SECRET será uma sequência longa de letras e números, sem hifens.
USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
Criar um logon do SQL Server para o Mecanismo de Banco de Dados para TDE
Crie um logon do SQL Server e adicione a credencial da Etapa 1 para ele. Esse exemplo do Transact-SQL usa a mesma chave que foi importada anteriormente.
USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it loads a database -- encrypted by TDE. CREATE LOGIN TDE_Login FROM ASYMMETRIC KEY CONTOSO_KEY; GO -- Alter the TDE Login to add the credential for use by the -- Database Engine to access the key vault ALTER LOGIN TDE_Login ADD CREDENTIAL Azure_EKM_TDE_cred ; GO
Criar a DEK (Chave de Criptografia de Banco de Dados)
A DEK criptografará os arquivos de log e de dados na instância do banco de dados e, por sua vez, será criptografada pela chave assimétrica do Cofre de Chaves do Azure. A DEK pode ser criada usando qualquer algoritmo com suporte do SQL Server ou o comprimento da chave.
USE ContosoDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY; GO
Ativar TDE
-- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON; GO
Usando o Management Studio, verifique se a TDE foi ativada conectando-se ao banco de dados com o Pesquisador de Objetos. Clique com o botão direito do mouse no banco de dados, aponte para Tarefase clique em Gerenciar Criptografia de Banco de Dados.
Na caixa de diálogo Gerenciar Criptografia de Banco de Dados , confirme se a TDE está ativada e se a chave assimétrica está criptografando a DEK.
Como alternativa, você pode executar o seguinte script de Transact-SQL. Um estado de criptografia de 3 indica um banco de dados criptografado.
USE MASTER SELECT * FROM sys.asymmetric_keys -- Check which databases are encrypted using TDE SELECT d.name, dek.encryption_state FROM sys.dm_database_encryption_keys AS dek JOIN sys.databases AS d ON dek.database_id = d.database_id;
Observação
O banco de dados do
tempdb
é criptografado automaticamente sempre que qualquer banco de dados habilita TDE.
Criptografia de backups usando uma chave assimétrica do Key Vault
Há suporte para backups criptografados a partir do SQL Server 2014 (12.x). O exemplo a seguir cria e restaura um backup criptografado e uma chave de criptografia de dados protegida pela chave assimétrica no cofre de chave.
O mecanismo de banco de dados usa as credenciais do aplicativo Microsoft Entra para acessar o Cofre de Chaves durante o carregamento de banco de dados. É recomendável criar outra ID do cliente e Segredo, conforme descrito na Etapa 1, para o Mecanismo de Banco de Dados, para limitar as permissões de Cofre de Chaves que são concedidas.
Criar uma credencial do SQL Server para o Mecanismo de Banco de Dados a ser usado para Criptografia de Backup
Modifique o script de Transact-SQL abaixo das seguintes maneiras:
Edite o argumento
IDENTITY
(ContosoDevKeyVault
) para apontar para o Cofre de Chaves do Azure.- Se você estiver usando o Azure global, substitua o argumento
IDENTITY
pelo nome do seu Azure Key Vault da Parte II. - Se você estiver usando uma nuvem privada do Azure (por ex., Azure Governamental, Microsoft Azure operado pela 21Vianet ou Azure Alemanha), substitua o argumento
IDENTITY
pelo URI do Cofre retornado na Parte II, etapa 3. Não inclua “https://” no URI do Cofre.
- Se você estiver usando o Azure global, substitua o argumento
Mude a primeira parte do argumento
SECRET
pela ID do cliente do aplicativo Microsoft Entra da Etapa 1. Nesse exemplo, a ID do Cliente éEF5C8E094D2A4A769998D93440D8115D
.Importante
É necessário remover os hifens da ID do Cliente.
Conclua a segunda parte do argumento
SECRET
com o Segredo do Cliente da Parte I. Neste exemplo, o Segredo do Cliente da Parte I éReplace-With-AAD-Client-Secret
. A cadeia de caracteres final do argumentoSECRET
será uma sequência longa de letras e números, sem hifens.USE master; CREATE CREDENTIAL Azure_EKM_Backup_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
Criar um logon do SQL Server para o Mecanismo de Banco de Dados a ser usado para Criptografia de Backup
Crie um logon do SQL Server que será usado pelo Mecanismo de banco de dados para criptografia de backups e adicione a credencial da Etapa 1 a ele. Esse exemplo do Transact-SQL usa a mesma chave que foi importada anteriormente.
Importante
Você não poderá usar a mesma chave assimétrica para criptografia de backup se você já tiver usado essa chave para a TDE (exemplo acima) ou criptografia de nível de coluna (exemplo abaixo).
Este exemplo usa a chave assimétrica do
CONTOSO_KEY_BACKUP
armazenada no cofre de chaves, que pode ser importada ou criada anteriormente para o banco de dados mestre, como descrito anteriormente na Parte IV, Etapa 5.USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it is encrypting the backup. CREATE LOGIN Backup_Login FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP; GO -- Alter the Encrypted Backup Login to add the credential for use by -- the Database Engine to access the key vault ALTER LOGIN Backup_Login ADD CREDENTIAL Azure_EKM_Backup_cred ; GO
Backup de banco de dados
Faça o backup do banco de dados especificando a criptografia com a chave assimétrica armazenada no cofre de chave.
No exemplo abaixo, observe que, se o banco de dados já foi criptografado com TDE e a chave assimétrica
CONTOSO_KEY_BACKUP
é diferente da chave assimétrica TDE, o backup será criptografado tanto pela chave assimétrica TDE quanto porCONTOSO_KEY_BACKUP
. A instância do SQL Server de destino precisará das duas chaves para descriptografar o backup.USE master; BACKUP DATABASE [DATABASE_TO_BACKUP] TO DISK = N'[PATH TO BACKUP FILE]' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]); GO
Restaurar o banco de dados
Para restaurar um backup de banco de dados criptografado com TDE, a instância do SQL Server de destino primeiro deve ter uma cópia da chave de cofre de chaves assimétrica usada para criptografia. Isso poderia ser feito assim:
Se a chave assimétrica original usada para TDE não estiver mais no cofre de chaves, restaure o backup da chave de cofre de chaves ou importe novamente a chave de uma HSM local. Importante: para que a impressão digital da chave corresponda a impressão digital registrada no backup do banco de dados, a chave deve ser nomeada com o mesmo nome de chave do Key Vault que recebeu originalmente.
Aplique as etapas 1 e 2 na instância do SQL Server de destino.
Uma vez que a instância do SQL Server de destino tiver acesso à(s) chave(s) assimétrica(s) usada(s) para criptografar o backup, restaure o banco de dados no servidor.
Código de restauração de exemplo:
RESTORE DATABASE [DATABASE_TO_BACKUP] FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE; GO
Para obter mais informações sobre opções de backup, consulte BACKUP (Transact-SQL).
Criptografia de nível de coluna usando uma chave assimétrica do Key Vault
O exemplo a seguir cria uma chave simétrica protegida pela chave assimétrica no cofre de chave. Em seguida, a chave simétrica é usada para criptografar dados no banco de dados.
Importante
Você não poderá usar a mesma chave assimétrica para criptografia de nível de coluna se você já tiver usado essa chave para criptografia de backup.
Este exemplo usa a chave assimétrica do CONTOSO_KEY_COLUMNS
armazenada no cofre de chaves, que pode ser importada ou criada anteriormente, como descrito na Etapa 3, seção 3 do Setup Steps for Extensible Key Management Using the Azure Key Vault(Etapas de instalação para o gerenciamento extensível de chaves usando o Cofre de Chaves do Azure). Para usar essa chave assimétrica no banco de dados ContosoDatabase
, você deve executar a instrução CREATE ASYMMETRIC KEY
novamente, para fornecer ao banco de dados ContosoDatabase
uma referência para a chave.
USE [ContosoDatabase];
GO
-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',
CREATION_DISPOSITION = OPEN_EXISTING;
-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
DECLARE @DATA VARBINARY(MAX);
--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY
(
KEY_GUID('DATA_ENCRYPTION_KEY'),
CONVERT(VARBINARY,'Plain text data to encrypt')
);
-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));
--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;
Confira também
Setup Steps for Extensible Key Management Using the Azure Key Vault (Etapas de instalação para o gerenciamento extensível de chaves usando o Cofre de Chaves do Azure)
Gerenciamento extensível de chaves usando o Azure Key Vault
Opção de configuração de servidor EKM provider enabled
Manutenção e solução de problemas do conector do SQL Server