Depois de mover um banco de dados de um servidor para outro, começamos a ter um problema:
> Msg 15581, Level 16, State 7, Procedure xxxxx, Line 24 [Batch Start Line 2]
Please create a master key in the database or open the master key in the session before performing this operation.
Msg 15315, Level 16, State 1, Procedure xxxxx, Line 62 [Batch Start Line 2]
The key '<CustomKeyName>' is not open. Please open the key before using it.
O procedimento em questão tem:
OPEN SYMMETRIC KEY MySymKey
DECRYPTION BY CERTIFICATE MySymCert;
Posso verificar que depois de mover o banco de dados, posso ver a symmetric key
e a certificate
consultando sys.symmetric_keys
e sys.certificates
.
Nós, sim, não temos a chave mestra. Estou curioso para saber se esse processo funcionaria:
- No servidor antigo (no escopo do BD):
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = 'a_cool_pass';
backup do BD novamente
Restaurar o BD no novo servidor novamente (com substituição)
OPEN MASTER KEY DECRYPTION BY PASSWORD = 'the_cool_Pass'
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
essa seria uma solução adequada para essa situação?
OU posso simplesmente remover a symmetric_key e o cert e recriá-los?
edição: REGENERATING
a chave mestra passou no servidor antigo, backup/restauração no novo, OPEN MASTER KEY DECRYPTION BY PASSWORD =
tive o problema The key is not encrypted using the specified decryptor.
(o que eu achei estranho. Tentarei novamente amanhã.
(precisaria fazer uma restauração de backup do certificado?
Sim. Você não precisa regenerar a chave mestra no servidor antigo.
Se estiver aberto (pela chave mestra do serviço), basta adicionar uma senha para descriptografar
também após restaurar no novo servidor, abra-o com a mesma senha
'a_cool_pass' e não 'the_cool_Pass'
Você perderá todos os dados criptografados com chave e certificado.
EDITAR.
Ele está anexado ao seu banco de dados, então não há necessidade de fazer isso, mas para tentar corrigir seus problemas, você pode executar um backup da chave mestra em vez de fazer backup/restaurar todo o banco de dados do servidor antigo.