Eu tenho um cenário em que estou restaurando um banco de dados de um servidor para outro. No servidor de origem, a chave mestra do banco de dados (DMK) é criptografada com uma senha e a chave mestra de serviço (SMK). Quando vou restaurá-lo para o novo servidor, a linha sys.key_encryptions
ainda diz que está criptografado pelo SMK. Isso não é verdade, já que os SMKs não correspondem entre os dois servidores. Existe alguma maneira programática de verificar se o DMK está realmente criptografado com o SMK deste servidor ?
relate perguntas
-
SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
Para determinar programaticamente se o SMK atual foi usado para proteger o DMK, você deve ser capaz de simplesmente tentar uma operação que exija o DMK. Essa operação precisaria primeiro descriptografar o DMK para usá-lo. Supondo que você não tenha aberto o DMK explicitamente (usando a senha fornecida ao criá-lo), descriptografar o DMK exigirá o SMK. Se o SMK atual não for o SMK correto , o DMK não será descriptografado automaticamente e a operação falhará. Então:
Se você possui um Certificado que existe com certeza no Banco de Dados que está sendo restaurado, tente usá-lo:
Isso deve retornar um
NULL
valor não VARBINARY. Se o valor de retorno forNULL
, o DMK precisará ser regenerado (conforme as instruções abaixo).Se nenhum certificado existir com certeza no banco de dados que está sendo restaurado, tente criar um. Se o SMK puder ser usado para descriptografar automaticamente o DMK, o certificado será criado; caso contrário, a operação falhará:
No entanto, como você acabou de restaurar um banco de dados proveniente de outra instância e não restaurou o SMK dessa outra instância na nova instância, é seguro assumir que a resposta é: "não, o DMK não está criptografado com o SMK deste servidor".
Este é um cenário esperado que requer as seguintes etapas para remediar:
A página do MSDN para
CREATE MASTER KEY
estados (ênfase adicionada):A página do MSDN para
OPEN MASTER KEY
os estados:A página do MSDN para ALTER MASTER KEY afirma: