Compartilhar via


Criar chaves simétricas idênticas em dois servidores

Este tópico descreve como criar chaves simétricas idênticas em dois servidores diferentes no SQL Server 2014 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. 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

Nesse Tópico

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 a permissão de ALTERAR QUALQUER CHAVE SIMÉTRICA no banco de dados. Se AUTHORIZATION for especificado, 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 feita por certificado ou chave assimétrica, será necessária 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 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 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 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);  
    SET @blob = SELECT CONVERT(varchar(8000), decryptbykey(@blob));  
    GO  
    
  7. Feche a chave simétrica em ambos os servidores.

    CLOSE SYMMETRIC KEY [key_DataShare];  
    GO  
    

Para obter mais informações, consulte o seguinte: