Restaurar banco de dados criptografado para outro servidor

10

Estou usando um produto que é executado no SQLServer 2008. Compreensivelmente, a empresa fornecedora não oferece suporte ao SQLServer. Quando instalei o produto, especifiquei uma senha para criptografar o banco de dados. Gostaria de executar outra cópia do produto para teste em outro servidor. Eu restaurei o banco de dados em outro servidor e instalei o produto nesse outro servidor. Quando o instalei, forneci a mesma senha e, em seguida, restaurei um backup do servidor principal. No entanto, estou recebendo a mensagem de erro:

System.Data.SqlClient.SqlException: An error occurred during decryption.

do produto. Eu posso acessar as tabelas usando o SQLServer Management studio.

Eu tentei isso:

no primeiro servidor:

CREATE CERTIFICATE cert1 WITH SUBJECT = 'Certificate for my stuff'

BACKUP CERTIFICATE  cert1 TO FILE = 'd:\backup\cert1.dat' 
WITH PRIVATE KEY 
(
ENCRYPTION BY PASSWORD = 'mypassword',
FILE = 'd:\backup\cert1_privatekey.dat'
)

no segundo servidor:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'mypassword'

CREATE CERTIFICATE cert1 FROM FILE = 'd:\cert1.dat'
WITH PRIVATE KEY
(
FILE = 'd:\cert1_privatekey.dat',
DECRYPTION BY PASSWORD = 'mypassword'
)

Eu também tentei isso no segundo servidor:

alter MASTER KEY regenerate with enCRYPTION BY PASSWORD='password'

mas isso deu uma mensagem de erro sobre uma chave assimétrica.

Como posso restaurar o backup do primeiro servidor para o segundo servidor?

Atualizar:

Há uma chave assimétrica e simétrica no banco de dados também. Se eu abrir a chave simétrica usando a chave assimétrica, recebo o mesmo erro, então acho que é por isso que não está funcionando - de alguma forma as chaves não estão sendo transferidas de forma que possam ser usadas.

paulmorriss
fonte

Respostas:

8

Eu escrevi uma entrada de blog sobre espelhamento e TDE.

Demorei um pouco para descobrir que, para obter o banco de dados no servidor secundário, eu precisava da linha de código:

 OPEN MASTER KEY DECRYPTION BY PASSWORD = 'SomePassword'
 ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY
 GO

A senha é a mesma que eu usei para criptografar o arquivo de chave mestra. Depois de emitir o comando no 2º servidor SQL, tudo funcionou bem. Aqui está o post db.stackexchange que fiz também.

Controle de taxa
fonte
Essa entrada do blog é útil. Eu o segui, exceto que, em vez de "mestre", uso o banco de dados específico que desejo copiar. Eu recebo o erro "Ocorreu um erro ao descriptografar a chave assimétrica 'asym_something' que foi criptografada pela chave mestra antiga. A opção FORCE pode ser usada para ignorar esse erro e continuar a operação, mas dados que não podem ser descriptografados pela chave mestra antiga ficará indisponível ". quando eu restauro a chave mestra do arquivo. Devo forçá-lo? (Isto é depois de eu ter restaurado o banco de dados, enquanto que as suas instruções têm a restaurar mais tarde.)
paulmorriss
11
Obrigado, demorei muito para descobrir. Não sei se você deve forçá-lo. Pelo que entendi, as "chaves" estão vinculadas aos bancos de dados MASTER em cada servidor. A única coisa vinculada ao banco de dados é o certificado assinado pela chave mestra. Portanto, você precisa criar uma chave mestra no servidor1, fazer backup e restaurar a chave no servidor 2. Em seguida, mova o certificado do banco de dados. Espero que outra pessoa possa lançar alguma luz sobre o assunto.
RateControl