Utilize o SQL Server Connector com funcionalidades de encriptação SQL

Aplica-se a:SQL Server

As atividades comuns de encriptação do SQL Server que utilizam uma chave assimétrica protegida pelo Azure Key Vault enquadram-se nas seguintes três áreas:

  • Encriptação de dados transparentes (TDE) utilizando uma chave assimétrica do Azure Key Vault.
  • Encriptar backups usando uma chave assimétrica do cofre de chaves.
  • Encriptação ao nível das colunas usando uma chave assimétrica do cofre de chaves.

Complete os passos 1 a 4 do Set up Encriptação de Dados Transparente with Azure Key Vault for SQL Server antes de seguir os passos deste artigo.

Observação

As versões 1.0.0.440 e anteriores são substituídas e já não são suportadas em ambientes de produção. Atualize para a versão 1.0.1.0 ou posterior. Descarregue a versão atual do Centro de Transferências da Microsoft e siga as instruções na secção "Atualização do SQL Server Connector" da manutenção e resolução de problemas do SQL Server Connector.

Observação

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

Encriptação de dados transparente usando uma chave assimétrica do Azure Key Vault

Depois de completar os passos 1 a 4 do configurar Encriptação de Dados Transparente com o Azure Key Vault para o SQL Server, utilize a chave do Azure Key Vault para encriptar a chave de encriptação da base de dados com TDE. Para mais informações sobre rotação de chaves usando PowerShell, veja Rodar o protetor do Encriptação de Dados Transparente (TDE) usando PowerShell.

Importante

Não elimine as versões anteriores da chave após o rollover. Quando as chaves são renovadas, alguns dados continuam encriptados com as chaves anteriores, como backups de bases de dados antigos, ficheiros de registo de cópias de segurança e ficheiros de registo de transações.

Precisa de criar uma credencial e um login, e criar uma chave de encriptação da base de dados que encripte os dados e os logs de transações na base de dados. Encriptar uma base de dados requer CONTROL permissão sobre a base de dados. O gráfico seguinte mostra a hierarquia da chave de encriptação quando se utiliza o Azure Key Vault.

Diagrama que mostra a hierarquia da chave de encriptação ao usar o Azure Key Vault.

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

    O Database Engine utiliza as credenciais da aplicação Microsoft Entra para aceder ao cofre de chaves durante o carregamento da base de dados. Para limitar as permissões do cofre de chaves que atribui, crie outro Client ID e Secret, conforme descrito no Passo 1: Configurar o modelo de autenticação, para o Database Engine.

    Modifique o script Transact-SQL abaixo das seguintes maneiras:

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

    • Substitua a primeira parte do SECRET argumento pelo ID do Cliente da aplicação Microsoft Entra do Passo 1: Configurar o modelo de autenticação. Neste exemplo, a ID do Cliente é EF5C8E094D2A4A769998D93440D8115D.

      Importante

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

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

    • 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_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 encriptação da base de dados (DEK)

    O DEK encripta os seus dados e ficheiros de registo na instância da base de dados e, por sua vez, é encriptado pela chave assimétrica do Azure Key Vault. 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. Ativar 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 ligando-se à sua base de dados com o Object Explorer. Clique com o botão direito na sua base de dados, aponte para Tasks e depois selecione Manage Database Encryption.

    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.

Encriptar 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 seguinte cria e restaura um backup encriptado com uma chave de encriptação de dados que a chave assimétrica no cofre de chaves protege.

O Database Engine utiliza as credenciais da aplicação Microsoft Entra para aceder ao cofre de chaves durante o carregamento da base de dados. Para limitar as permissões do cofre de chaves que concede, crie outro ID de Cliente e Segredo, conforme descrito no Passo 1: Configurar o modelo de autenticação, para o Database Engine.

  1. Crie uma credencial SQL Server para o Database Engine usar para encriptação de backups

    Modifique o script Transact-SQL abaixo das seguintes maneiras:

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

    • Substitua a primeira parte do argumento SECRET pelo Client ID da aplicação Microsoft Entra do Passo 1: Configurar o modelo de autenticação. Neste exemplo, a ID do Cliente é EF5C8E094D2A4A769998D93440D8115D.

      Importante

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

    • Complete a segunda parte do SECRET argumento com o Segredo do Cliente do passo 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 login SQL Server para o Database Engine para encriptação 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 pode usar a mesma chave assimétrica para encriptação de backup se já usou essa chave para TDE (o exemplo anterior), ou para encriptação ao nível das colunas (o exemplo seguinte).

    Este exemplo utiliza a chave assimétrica CONTOSO_KEY_BACKUP armazenada no cofre de chaves, que pode ter importado ou criado anteriormente para a master base 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 da base de dados

    Faça backup da base de dados, especificando a encriptação com a chave assimétrica armazenada no cofre de chaves.

    No exemplo seguinte, note-se que se a base de dados já estivesse encriptada com TDE, e a chave assimétrica CONTOSO_KEY_BACKUP fosse diferente da chave assimétrica TDE, o backup é encriptado tanto pela chave assimétrica TDE como por CONTOSO_KEY_BACKUP. A instância do SQL Server de destino precisa de ambas as chaves para desencriptar 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 a base de dados

    Para restaurar uma cópia de segurança de base de dados encriptada com TDE, a instância do SQL Server de destino deve primeiro ter uma cópia da chave assimétrica do cofre de chaves usada para encriptação. Para fornecer essa cópia:

    • Se a chave assimétrica original usada para TDE já não estiver no cofre de chaves, restaure o backup da chave do cofre de chaves ou reimporte a chave de um HSM local. Para que a impressão digital da chave corresponda à impressão digital registada na cópia de segurança da base 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 de a instância do SQL Server de destino ter acesso às chaves assimétricas usadas para encriptar o backup, restaure a base 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 mais informações sobre opções de backup, consulte BACKUP (Transact-SQL).

Encriptação ao nível das colunas 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 encripta então os dados na base de dados.

Importante

Não podes usar a mesma chave assimétrica para encriptação ao nível das colunas se já usaste essa chave para encriptação de backup.

Este exemplo utiliza a CONTOSO_KEY_COLUMNS chave assimétrica armazenada no cofre de chaves, que pode ter importado ou criado anteriormente, conforme descrito no Passo 2: Criar um cofre de chaves. Para usar esta chave assimétrica na ContosoDatabase base de dados, execute novamente a CREATE ASYMMETRIC KEY instrução para dar à ContosoDatabase base de dados 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;