Erro 33111 ao restaurar backups de versões mais antigas do Conector do SQL Server para Microsoft Azure Key Vault

Número KB original: 4470999

Este artigo aborda um erro que ocorre quando você tenta restaurar um backup de TDE (Transparent Data Encryption) feito em servidores que usam versões mais antigas do SQL Server Connector para o Microsoft Azure Key Vault.

Sintomas

Você tem problemas ao tentar restaurar um backup de banco de dados do SQL Server que usa o SQL Server Connector para Key Vault 1.0.4.0 ou uma versão anterior para Conector do SQL Server para Microsoft Azure Key Vault 1.0.5.0.

Suponha que você implante as seguintes instâncias do Microsoft SQL Server:

  • SQL Server instância tem sql1 SQL Server Connector para Key Vault 1.0.4.0 implantado.

  • SQL Server instância tem sql2 SQL Server Connector para Key Vault 1.0.5.0 implantado.

  • Use a consulta a seguir para implantar uma chave assimétrica em ambas sql1sql2 e instâncias da mesma fonte de chave assimétrica no Key Vault:

    CREATE ASYMMETRIC KEY TDE_KEY 
    FROM PROVIDER AzureKeyVaultProvider 
    WITH PROVIDER_KEY_NAME = 'key1', 
    CREATION_DISPOSITION = OPEN_EXISTING
    

Se você examinar o valor das impressões digitais em ambos os servidores, observará que os comprimentos da impressão digital diferem, embora sejam criados da mesma fonte. A impressão digital da versão 1.0.5.0 é maior que a versão 1.0.4.0.

Exemplo de impressão digital 1.0.4.0:

0x2C5677D76F76D77F80

Exemplo de impressão digital 1.0.5.0:

0x373B314B78E8D59A0925494558FEF14B726216C5

A alteração faz com que ocorram problemas durante operações de backup e restauração.

Exemplo:

Você tem um backup de banco de dados criptografado por uma chave assimétrica Key Vault na sql1 instância.

A sql2 instância tem uma chave assimétrica criada.

Se você tentar restaurar o backup sql2 na instância, a operação falhará e retornará uma mensagem de erro semelhante à seguinte mensagem:

Msg 33111, Nível 16, Estado 4, Line <LineNumber>

Não é possível localizar a chave assimétrica do servidor com a impressão digital '0x2C5677D76F76D77F80'.

Observações:

A consulta para recuperar a impressão digital de cada chave é a seguinte:

SELECT thumbprint, * FROM master.sys.asymmetric_keys

A consulta para recuperar a impressão digital de cada banco de dados TDE é a seguinte:

SELECT DatabaseName(ddek.database_id) AS DatabaseName, ak.name
AS [Asymmetric key Name], ak.thumbprint FROM
sys.dm_database_encryption_keys ddek INNER JOIN
master.sys.asymmetric_keys ak ON
ak.thumbprint = ddek.encryptor_thumbprint

Motivo

Uma atualização foi introduzida na versão 1.0.5.0 do SQL Server Connector para Key Vault que altera a maneira como o programa calcula as impressões digitais. Na versão 1.0.5.0, esse cálculo corresponde à lógica usada pelo mecanismo de programa para dar suporte ao seguinte cenário de migração:

De: Microsoft SQL Server local que usa OKM (Gerenciamento Extensível de Chaves)

Para: Banco de Dados SQL do Microsoft Azure que usa o suporte BYOK (Bring Your Own Key) para TDE (Transparent Data Encryption)

Devido a essa alteração, você pode ter problemas ao tentar restaurar backups de banco de dados da versão 1.0.4.0 ou de uma versão anterior.

Resolução

  1. Copie o SQL Server conector para Key Vault 1.0.4.0 ou uma versão anterior para o servidor sql2 de instância.

  2. Execute a seguinte consulta no servidor sql2 para alterar a CRYPTOGRAPHIC PROVIDER versão 1.0.4.0:

    ALTER CRYPTOGRAPHIC PROVIDER AzureKeyVaultProvider
    FROM FILE =
    'FilePath\FileName\SQL Server Connector for Microsoft Azure Key Vault\1.0.4.0\Microsoft.AzureKeyVaultService.EKM.dll'
    
    1. Reinicie SQL Server.

    2. Crie uma nova chave assimétrica usando CRYPTOGRAPHIC PROVIDER 1.0.4.0.

        CREATE ASYMMETRIC KEY TDE_KEY_1040 
        FROM PROVIDER AzureKeyVaultProvider 
        WITH PROVIDER_KEY_NAME = 'key1', 
        CREATION_DISPOSITION = OPEN_EXISTING
      
  3. Você pode confirmar a existência de ambas as chaves assimétricas usando a seguinte consulta:

    SELECT thumbprint,* FROM master.sys.asymmetric_keys
    
  4. Adicione credenciais ao logon mapeado de chave assimétrica (TDE_Login no exemplo a seguir) usando uma consulta semelhante à seguinte consulta:

    ALTER LOGIN [Contoso\DomainUser] DROP CREDENTIAL sysadmin_ekm_cred; 
    ALTER LOGIN TDE_Login ADD CREDENTIAL sysadmin_ekm_cred;
    
  5. Agora você deve ser capaz de restaurar o backup.

  6. Execute a seguinte consulta para sql2 reverter a CRYPTOGRAPHIC PROVIDER versão 1.0.5.0:

    ALTER CRYPTOGRAPHIC PROVIDER AzureKeyVaultProvider 
    FROM FILE =
    'FilePath\FileName\SQL Server Connector for Microsoft Azure Key Vault\1.0.5.0\Microsoft.AzureKeyVaultService.EKM.dll'
    
  7. Reinicie SQL Server.

  8. Para usar a nova impressão digital, execute a consulta a seguir usando a mesma chave assimétrica ou a nova chave assimétrica de versão.

    ALTER DATABASE ENCRYPTION KEY
    ENCRYPTION BY SERVER ASYMMETRIC KEY <KeyName_1.0.5.0_version>