Partilhar via


Usar o SQL Server Connector com recursos de criptografia SQL

Aplica-se a:SQL Server

As atividades comuns de criptografia do SQL Server usando uma chave assimétrica protegida pelo Cofre de Chaves do Azure incluem as três áreas a seguir.

  • Criptografia de dados transparente usando uma chave assimétrica do Cofre de Chaves do Azure

  • Cifrando backups usando uma chave assimétrica do Cofre de Chaves

  • Criptografia ao nível de coluna usando uma chave assimétrica do Azure Key Vault

Conclua as partes I a IV do tópico Etapas de instalação para gerenciamento extensível de chaves usando o Cofre de Chaves do Azure, antes de seguir as etapas neste tópico.

Observação

As versões 1.0.0.440 e anteriores foram substituídas e não são mais suportadas 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 na página SQL Server Connector Maintenance & Troubleshooting em "Atualização do SQL Server Connector".

Observação

Microsoft Entra ID era anteriormente conhecido como Azure Ative Directory (Azure AD).

Criptografia de dados transparente usando uma chave assimétrica do Cofre de Chaves do Azure

Depois de concluir as Partes I a IV do tópico Etapas de configuração para gerenciamento extensível de chaves usando o Cofre de Chaves do Azure, use a chave do Cofre de Chaves do Azure para criptografar a chave de criptografia do banco de dados usando TDE. Para obter mais informações sobre como girar chaves usando o PowerShell, consulte Girar o protetor TDE (Criptografia de Dados Transparente) usando o PowerShell.

Importante

Não exclua versões anteriores da chave após uma troca. Quando as chaves são substituídas, alguns dados ainda são cifrados com as chaves anteriores, como backups mais antigos de bases de dados, ficheiros de log de backups e ficheiros de log de transações.

Você precisará criar uma credencial e um login, e criar uma chave de criptografia de banco de dados que criptografará os dados e logs no banco de dados. Para criptografar um banco de dados, é necessário ter a permissão CONTROL no banco de dados. O gráfico a seguir mostra a hierarquia da chave de criptografia ao usar o Cofre de Chaves do Azure.

Diagrama mostrando a hierarquia da chave de criptografia ao usar o Cofre de Chaves do Azure.

  1. Criar uma credencial do SQL Server para ser usada pelo Mecanismo de Banco de Dados para o TDE

    O Mecanismo de Banco de Dados usa as credenciais do aplicativo Microsoft Entra para acessar o Cofre da Chave durante o carregamento do banco de dados. Recomendamos a criação de outro ID do Cliente e Secreto , conforme descrito na Etapa 1, para o Mecanismo de Banco de Dados, para limitar as permissões concedidas pelo Cofre de Chaves.

    Modifique o script Transact-SQL abaixo das seguintes maneiras:

    • Edite o argumento IDENTITY (ContosoDevKeyVault) para apontar para o seu Cofre de Chaves do Azure.

      • Se estiver a utilizar global do Azure , substitua o argumento IDENTITY pelo nome do seu Cofre de Chaves do Azure da Parte II.
      • Se estiveres a usar uma nuvem privada do Azure (por exemplo, Azure Government, Azure operado pela 21Vianet, ou Azure Germany), substitui o argumento IDENTITY pelo URI do Vault retornado na Parte II, passo 3. Não inclua "https://" no URI do Vault.
    • Substitua a primeira parte do argumento SECRET pelo aplicativo Microsoft Entra ID do Cliente de Etapa 1. Neste exemplo, a ID do Cliente é EF5C8E094D2A4A769998D93440D8115D.

      Importante

      Você deve remover os hífenes do ID de 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 para o argumento SECRET será uma longa sequência de letras e números, sem hífenes.

    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;  
    
  2. 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 a ele. Este exemplo 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  
    
  3. Criar a chave de criptografia de banco de dados (DEK)

    O DEK criptografará seus dados e arquivos de log na instância do banco de dados e, por sua vez, será criptografado pela chave assimétrica do Cofre da Chave do Azure. O DEK pode ser criado usando qualquer algoritmo ou comprimento de chave com suporte do SQL Server.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Ativar o 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 seu banco de dados com o Pesquisador de Objetos. Clique com o botão direito do rato na base de dados, aponte para Tarefase, em seguida, clique em Gerir Encriptação de Base de Dados.

    Captura de tela mostrando o Pesquisador de Objetos com Tarefas > Gerenciar Criptografia de Banco de Dados selecionada.

    Na caixa de diálogo Gerenciar Criptografia de Banco de Dados, confirme se a TDE está ativada e qual chave assimétrica está criptografando a DEK.

    Captura de tela da caixa de diálogo Gerenciar criptografia de banco de dados com a opção Definir criptografia de banco de dados ativada selecionada e um banner amarelo dizendo Agora a TDE está ativada.

    Como alternativa, você pode executar o seguinte script 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 tempdb é automaticamente criptografado sempre que qualquer banco de dados habilita a TDE.

Cifrando backups usando uma chave assimétrica do Cofre de Chaves

Há suporte para backups criptografados a partir do SQL Server 2014 (12.x). O exemplo a seguir cria e restaura um backup criptografado, uma chave de criptografia de dados protegida pela chave assimétrica no cofre de chaves.
O Mecanismo de Banco de Dados usa as credenciais do aplicativo Microsoft Entra para acessar o Cofre da Chave durante o carregamento do banco de dados. Recomendamos a criação de outro ID do Cliente e Secreto , conforme descrito na Etapa 1, para o Mecanismo de Banco de Dados, para limitar as permissões concedidas pelo Cofre de Chaves.

  1. Criar uma credencial do SQL Server para o Mecanismo de Banco de Dados para ser usado na Criptografia de Backup

    Modifique o script Transact-SQL abaixo das seguintes maneiras:

    • Edite o argumento IDENTITY (ContosoDevKeyVault) para apontar para o seu Cofre de Chaves do Azure.

      • Se estiver a utilizar global do Azure , substitua o argumento IDENTITY pelo nome do seu Cofre de Chaves do Azure da Parte II.
      • Se você estiver usando um de nuvem privada do Azure (por exemplo, Azure Government, Microsoft Azure operado pela 21Vianet ou Azure Germany), substitua o argumento IDENTITY pelo URI do Vault retornado na Parte II, etapa 3. Não inclua "https://" no URI do Vault.
    • Substitua a primeira parte do argumento SECRET pelo aplicativo Microsoft Entra ID do Cliente de Etapa 1. Neste exemplo, a ID do Cliente é EF5C8E094D2A4A769998D93440D8115D.

      Importante

      Você deve remover os hífenes do ID de Cliente.

    • Conclua a segunda parte do argumento SECRET com o Segredo do Cliente da Parte I. Neste exemplo, o Segredo do Cliente . A cadeia de caracteres final para o argumento SECRET será uma longa sequência de letras e números, sem hífenes.

      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;    
      
  2. Criar um logon do SQL Server para o Mecanismo de Banco de Dados para Criptografia de Backup

    Crie um logon do SQL Server para ser usado pelo Mecanismo de Banco de Dados para backups de criptografia e adicione a credencial da Etapa 1 a ele. Este exemplo Transact-SQL usa a mesma chave que foi importada anteriormente.

    Importante

    Não é possível usar a mesma chave assimétrica para criptografia de backup se já tiver usado essa chave para TDE (o exemplo acima) ou criptografia em nível de coluna (o exemplo a seguir).

    Este exemplo usa a CONTOSO_KEY_BACKUP chave assimétrica armazenada no cofre de chaves, que pode ser importada ou criada anteriormente para o banco de dados mestre, como Parte IV, Etapa 5 anteriormente.

    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  
    
  3. Backup do banco de dados

    Faça backup do banco de dados especificando a criptografia com a chave assimétrica armazenada no cofre de chaves.

    No exemplo abaixo, observe que, se o banco de dados já foi criptografado com TDE e a chave assimétrica CONTOSO_KEY_BACKUP for diferente da chave assimétrica TDE, o backup será criptografado pela chave assimétrica TDE e pelo CONTOSO_KEY_BACKUP. A instância do SQL Server de destino precisará de ambas as 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  
    
  4. restaurar o banco de dados

    Para restaurar um backup de banco de dados criptografado com TDE, a instância do SQL Server de destino deve primeiro ter uma cópia da chave assimétrica do Cofre da Chave usada para criptografia. Desta forma, conseguir-se-ia:

    • Se a chave assimétrica original usada para TDE não estiver mais no Cofre da Chave, restaure o backup da chave do Cofre da Chave ou reimporte a chave de um HSM local. Importante: Para que a impressão digital da chave corresponda à impressão digital gravada no backup do banco de dados, a chave deve ser nomeada mesmo nome de chave do Cofre da Chave como foi originalmente nomeado antes.

    • Aplique as etapas 1 e 2 na instância de destino do SQL Server.

    • Quando 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.

    Exemplo de código de restauração:

    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 ao nível de coluna usando uma chave assimétrica do Azure Key Vault

O exemplo a seguir cria uma chave simétrica protegida pela chave assimétrica no cofre de chaves. Em seguida, a chave simétrica é usada para criptografar dados no banco de dados.

Importante

Não é possível usar a mesma chave assimétrica para criptografia no nível da coluna se já tiver usado essa chave para criptografia de backup.

Este exemplo usa a chave assimétrica CONTOSO_KEY_COLUMNS armazenada no cofre de chaves, que pode ser importada ou criada anteriormente, conforme descrito na Etapa 3, seção 3 de Etapas de configuração para 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 à 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;  

Ver também

etapas de configuração para gerenciamento extensível de chaves usando o Azure Key Vault
Gerenciamento extensível de chaves usando o Azure Key Vault
Opção de configuração de servidor com provedor EKM habilitado
Manutenção do SQL Server Connector & solução de problemas