Partilhar via


Crie chaves simétricas idênticas em dois servidores

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada 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 desencriptar o texto cifrado, precisa da chave que foi usada para o encriptar. 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. Mas 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 uma das seguintes opções: certificado, senha, chave simétrica, chave assimétrica ou PROVIDER. A chave pode ter mais de uma criptografia de cada tipo. Em outras palavras, uma única chave simétrica pode ser criptografada usando vários certificados, senhas, chaves simétricas e chaves assimétricas ao mesmo tempo.

  • Quando uma chave simétrica é criptografada com uma senha em vez da chave pública da chave mestra do banco de dados, o algoritmo de criptografia TRIPLE DES é usado. Devido a isso, as chaves que são criadas com um algoritmo de encriptação forte, como AES, são protegidas por um algoritmo mais fraco.

Segurança

Permissões

Requer a permissão ALTER ANY SYMMETRIC KEY no banco de dados. Se AUTHORIZATION estiver especificado, será necessária a permissão IMPERSONATE no utilizador da base de dados ou a permissão ALTER na função de aplicação. Se a criptografia for feita por certificado ou por chave assimétrica, requer 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 possuir chaves simétricas. Grupos e funções não podem possuir chaves simétricas.

Usando 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 uma chave executando as seguintes instruções CREATE MASTER KEY, CREATE CERTIFICATE e CREATE SYMMETRIC KEY. Substitua <password> por uma senha válida.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';  
    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-se 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 SYMMETRIC KEY 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 código a seguir como o valor de @blob e execute o código a seguir 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 para seu trabalho de criptografia. A partir do SQL Server 2017, o SHA2 é usado. Isso significa que etapas adicionais podem ser necessárias para que sua instalação do SQL Server 2017 descriptografe itens que foram criptografados pelo SQL Server 2016. Aqui estão os passos extras:

  • Verifique se o SQL Server 2017 está atualizado para, pelo menos, a Atualização Cumulativa 2 (CU2).
  • Depois de instalar o 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 ser ON globalmente antes de criar a chave mestra, o certificado ou a chave simétrica no SQL Server 2017. Isso permite que esses itens criados interoperem com o SQL Server 2016 e versões anteriores. Esse sinalizador de rastreamento só deve ser ativado temporariamente para fazer a recriptografia de dados com chaves derivadas de SHA2.

Para mais informações, consulte:

Ver também