Usar o Conector do SQL Server com recursos de criptografia do SQL

Aplica-se a: 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.

Diagrama mostrando a hierarquia da chave de criptografia ao usar o Azure Key Vault.

  1. 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.
    • 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;  
    
  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 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  
    
  3. 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  
    
  4. 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.

    Captura de tela mostrando o Pesquisador de Objetos com a opção 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 se a 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 como Ativa selecionada e uma faixa amarela que indica Agora a TDE está ativada.

    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.

  1. 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.
    • 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 argumento SECRET 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;    
      
  2. 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  
    
  3. 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 por CONTOSO_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  
    
  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 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