Criar chaves simétricas idênticas em dois servidores

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Este tópico descreve como criar chaves simétricas idênticas em dois servidores diferentes no SQL Server usando o Transact-SQL. Para descriptografar texto cifrado, você precisa da chave que foi usada para criptografá-lo. Quando a criptografia e a descriptografia ocorrem em um único banco de dados, a chave é armazenada no banco de dados e está disponível, dependendo das permissões, para criptografia e descriptografia. Porém, quando a criptografia e a descriptografia ocorrem em bancos de dados separados ou em servidores separados, a chave armazenada em um banco de dados não está disponível para uso no segundo banco de dados.

Antes de começar

Limitações e restrições

  • Quando uma chave simétrica é criada, a chave simétrica deve ser criptografada usando pelo menos um dos seguintes: senha, certificado, chave simétrica, chave assimétrica ou provedor. A chave pode ter mais de uma criptografia de cada tipo. Em outras palavras, uma única chave simétrica pode ser criptografada com o uso de vários certificados, senhas, chaves simétricas e chaves assimétricas ao mesmo tempo.

  • Quando uma chave simétrica é criptografada com uma senha e não com a chave pública da chave mestre do banco de dados, o algoritmo de criptografia TRIPLE DES é usado. Por esse motivo, as chaves criadas com um algoritmo de criptografia forte, como AES, são protegidas por um algoritmo mais fraco.

Segurança

Permissões

Requer permissão ALTER ANY SYMMETRIC KEY no banco de dados. Se AUTHORIZATION for especificada, será necessária a permissão IMPERSONATE no usuário de banco de dados ou a permissão ALTER na função de aplicativo. Se a criptografia for por certificado ou chave assimétrica, exigirá a permissão VIEW DEFINITION no certificado ou na chave assimétrica. Somente logons do Windows, logons do SQL Server e funções de aplicativo podem ter chaves simétricas. Grupos e funções não podem possuir chaves simétricas.

Usando o Transact-SQL

Para criar chaves simétricas idênticas em dois servidores diferentes

  1. No Pesquisador de Objetos, conecte-se a uma instância do Mecanismo de Banco de Dados.

  2. Na barra Padrão, clique em Nova Consulta.

  3. Crie a chave executando as instruções CREATE MASTER KEY, CREATE CERTIFICATE e CREATE SYMMETRIC KEY.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd';  
    GO  
    CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection';  
    GO  
    CREATE SYMMETRIC KEY [key_DataShare] WITH  
        KEY_SOURCE = 'My key generation bits. This is a shared secret!',  
        ALGORITHM = AES_256,   
        IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret'  
        ENCRYPTION BY CERTIFICATE [cert_keyProtection];  
    GO  
    
  4. Conecte a uma instância de servidor separada, abra uma Janela de Consulta diferente e execute as instruções SQL acima para criar a mesma chave no segundo servidor.

  5. Teste as chaves executando primeiro a instrução OPEN e a instrução SELECT abaixo no primeiro servidor.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' )  
    GO  
    -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3  
    
  6. No segundo servidor, cole o resultado da instrução SELECT anterior no seguinte código como o valor de @blob e execute esse código para verificar se a chave duplicada pode descriptografar o texto cifrado.

    OPEN SYMMETRIC KEY [key_DataShare]   
        DECRYPTION BY CERTIFICATE cert_keyProtection;  
    GO  
    DECLARE @blob varbinary(8000);  
    SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Feche a chave simétrica em ambos os servidores.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Alterações de criptografia no SQL Server 2017 CU2

O SQL Server 2016 usa o algoritmo de hash SHA1 em seu trabalho de criptografia. O SHA2 é usado desde o SQL Server 2017. Dessa maneira, talvez você precise de mais etapas para que a instalação do SQL Server 2017 descriptografe itens que eram criptografados pelo SQL Server 2016. Confira as etapas adicionais:

  • Verifique se o SQL Server 2017 está atualizado ao menos para CU2 (Atualização Cumulativa 2).
  • Após a instalação da CU2, ative o sinalizador de rastreamento 4631 no SQL Server 2017: DBCC TRACEON(4631, -1);
    • O sinalizador de rastreamento 4631 é novo no SQL Server 2017. O sinalizador de rastreamento 4631 precisa estar ON globalmente antes da criação da chave mestra, do certificado ou da chave simétrica no SQL Server 2017. Dessa maneira, os itens criados poderão interoperar com o SQL Server 2016 e as versões anteriores. Esse sinalizador de rastreamento só deve ser ativado temporariamente para fazer a nova criptografia de dados com chaves derivadas de SHA2.

Para saber mais, veja:

Confira também