Use o SQL Server Connector com recursos de criptografia SQL

Aplica-se:SQL Server

Atividades comuns de criptografia do SQL Server que utilizam uma chave assimétrica protegida pelo Azure Key Vault se enquadram nas seguintes três áreas:

  • Criptografia de dados transparentes (TDE) usando uma chave assimétrica do Azure Key Vault.
  • Criptografar backups usando uma chave assimétrica do cofre de chaves.
  • Criptografia em nível de coluna usando uma chave assimétrica do cofre de chaves.

Complete os passos 1 a 4 do Set up Transparent Data Encryption com o Azure Key Vault for SQL Server antes de seguir os passos deste artigo.

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. Baixe a versão atual no Centro de Download da Microsoft e siga as instruções na seção "Atualização do SQL Server Connector" da manutenção e solução de problemas do SQL Server Connector.

Observação

O Microsoft Entra ID era conhecido como Azure Active Directory (Azure AD).

Criptografia de dados transparente usando uma chave assimétrica do Azure Key Vault

Depois de completar as etapas 1 a 4 de Configurar a Transparent Data Encryption com o Azure Key Vault para o SQL Server, use a chave do Azure Key Vault para criptografar a chave de criptografia do banco de dados com TDE. Para mais informações sobre rotação de chaves usando PowerShell, veja Girar o protetor do Transparent Data Encryption (TDE) usando PowerShell.

Importante

Não exclua as versões anteriores da chave após uma substituição. Quando as chaves são rotacionadas, alguns dados ainda são criptografados com as chaves anteriores, como backups antigos de banco de dados, arquivos de log com backup e arquivos de log de transações.

Você precisa criar uma credencial e um login, e criar uma chave de criptografia de banco de dados que criptografe os dados e os logs de transações do banco de dados. Criptografar um banco de dados requer permissão CONTROL no banco de dados. O gráfico a seguir mostra a hierarquia da chave de criptografia quando você usa o Azure Key Vault.

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

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

    O Mecanismo de Banco de Dados utiliza as credenciais do aplicativo Microsoft Entra para acessar o cofre de chaves durante o carregamento do banco de dados. Para limitar as permissões do cofre de chaves que você concede, crie outro ID de Cliente e Segredo, conforme descrito no Passo 1: Configurar o modelo de autenticação, para o Mecanismo de Banco de Dados.

    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 estiver usando o Azure global, substitua o argumento IDENTITY pelo nome do seu Azure Key Vault da Etapa 2: Criar um cofre de chaves.
      • Se você estiver usando uma nuvem privada do Azure, por exemplo Azure Governamental, Azure operado pela 21Vianet ou Azure Alemanha, substitua o argumento IDENTITY pelo URI do Vault retornado em Create a key vault and key by using PowerShell. Não inclua https:// no URI do cofre de chaves.
    • Substitua a primeira parte do SECRET argumento pelo ID do Cliente da aplicação Microsoft Entra da Etapa 1: Configure o modelo de autenticação. Nesse exemplo, a ID do Cliente é EF5C8E094D2A4A769998D93440D8115D.

      Importante

      É necessário remover os hifens da ID do Cliente.

    • Complete a segunda parte do SECRET argumento com o Client Secret da etapa 1. Neste exemplo, o Segredo do Cliente é ReplaceWithAADClientSecret.

    • A string final para o argumento SECRET é uma longa sequência de letras e números, sem hífens.

    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. Crie a chave de criptografia do banco de dados (DEK)

    O DEK criptografa seus dados e arquivos de log na instância do banco de dados e, por sua vez, é criptografado pela chave assimétrica do Azure Key Vault. Você pode criar o DEK usando qualquer algoritmo ou comprimento de chave que o SQL Server suporte.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. Ligue o TDE

    -- Alter the database to enable transparent data encryption.  
    ALTER DATABASE ContosoDatabase   
    SET ENCRYPTION ON;  
    GO  
    

    Usando o Management Studio, verifique se o TDE está ativado conectando-se ao seu banco de dados com o Pesquisador de Objetos. Clique com o botão direito no seu banco de dados, aponte para Tarefas e então selecione Gerenciar Criptografia do 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.

Criptografando 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 com uma chave de criptografia de dados que a chave assimétrica no cofre de chaves protege.

O Mecanismo de Banco de Dados utiliza as credenciais do aplicativo Microsoft Entra para acessar o cofre de chaves durante o carregamento do banco de dados. Para limitar as permissões do cofre de chaves que você concede, crie outro ID de Cliente e Segredo, conforme descrito no Passo 1: Configurar o modelo de autenticação, para o Mecanismo de Banco de Dados.

  1. Crie uma credencial do SQL Server para o Mecanismo de Banco de Dados usar 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 estiver usando o Azure global, substitua o argumento IDENTITY pelo nome do seu Azure Key Vault da Etapa 2: Criar um cofre de chaves.
      • Se você está usando uma nuvem Azure privada, por exemplo Azure Governamental, Microsoft Azure operado pela 21Vianet, ou Azure Alemanha, substitua o argumento IDENTITY pelo URI do Vault retornado em Create a key vault and key by using PowerShell. Não inclua https:// no URI do cofre de chaves.
    • Substitua a primeira parte do argumento SECRET pelo ID do cliente do aplicativo Microsoft Entra da Etapa 1: Configure o modelo de autenticação. Nesse exemplo, a ID do Cliente é EF5C8E094D2A4A769998D93440D8115D.

      Importante

      É necessário remover os hifens da ID do Cliente.

    • Complete a segunda parte do argumento SECRET com o Client Secret da etapa 1. Neste exemplo, o Segredo do Cliente é Replace-With-AAD-Client-Secret. A sequência final do SECRET argumento é uma longa sequência de letras e números, sem hífens.

      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. Crie um logon no SQL Server para o Mecanismo de Banco de Dados para criptografia de backup

    Crie um logon do SQL Server a ser usado pelo Mecanismo de Banco de Dados para backups de criptografia 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 pode usar a mesma chave assimétrica para criptografia de backup se já usou essa chave para TDE (o exemplo anterior) ou para 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 você pode importar ou criar anteriormente para o master banco de dados, conforme descrito no Passo 2: Criar um cofre de chaves.

    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. Faça 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 a seguir, observe que, se o banco de dados já estava criptografado com TDE, e a chave assimétrica CONTOSO_KEY_BACKUP era diferente da chave assimétrica TDE, o backup é criptografado tanto pela chave assimétrica TDE quanto por CONTOSO_KEY_BACKUP. A instância de SQL Server de destino precisa 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 de destino do SQL Server deve primeiro ter uma cópia da chave assimétrica do cofre de chaves usada para criptografia. Para fornecer essa cópia:

    • Se a chave assimétrica original usada para TDE não estiver mais no cofre de chaves, restaure o backup da chave do cofre de chaves ou reimporte a chave de um HSM local. Para que o fingerprint da chave corresponda ao fingerprint registrado no backup do banco de dados, a chave deve usar o mesmo nome de chave do cofre de chaves que tinha originalmente.

    • Aplique os passos 1 e 2 na instância de SQL Server de destino.

    • Depois que a instância do SQL Server de destino tiver acesso às chaves assimétricas usadas 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 em nível de coluna usando uma chave assimétrica do cofre de chaves

O exemplo a seguir cria uma chave simétrica protegida pela chave assimétrica no cofre de chaves. A chave simétrica então criptografa os dados no banco de dados.

Importante

Você não pode usar a mesma chave assimétrica para criptografia em nível de coluna se já usou essa chave para criptografia de backup.

Este exemplo usa a CONTOSO_KEY_COLUMNS chave assimétrica armazenada no cofre de chaves, que você pode importar ou criar previamente, conforme descrito no Passo 2: Criar um cofre de chaves. Para usar essa chave assimétrica no ContosoDatabase banco de dados, execute novamente a CREATE ASYMMETRIC KEY instrução para dar ao ContosoDatabase banco 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;