web-dev-qa-db-fra.com

Restaurer la base de données cryptée sur un autre serveur

J'utilise un produit qui s'exécute sur SQLServer 2008. Naturellement, la société qui la fournisse ne propose pas de support SQLServer. Lorsque j'ai installé le produit, j'ai spécifié un mot de passe pour chiffrer la base de données. J'aimerais exécuter une autre copie du produit pour tester un autre serveur. J'ai restauré la base de données sur un autre serveur et installé le produit sur cet autre serveur. Lorsque je l'ai installé, j'ai fourni le même mot de passe, puis restauré une sauvegarde à partir du serveur principal. Cependant, je reçois le message d'erreur:

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

du produit. Je peux accéder aux tables en utilisant SQLServer Management Studio.

J'ai essayé ceci:

sur le premier serveur:

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'
)

sur le deuxième serveur:

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'
)

J'ai aussi essayé ceci sur le deuxième serveur:

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

mais cela a donné un message d'erreur sur une clé asymétrique.

Comment puis-je restaurer la sauvegarde du premier serveur sur le deuxième serveur?

Mise à jour :

Il existe une clé asymétrique et symétrique dans la base de données. Si j'ouvre la clé symétrique à l'aide de la clé asymétrique, je reçois la même erreur, je pense que c'est pourquoi cela ne fonctionne pas - d'une manière ou d'une autre, les clés ne sont pas transférées de manière à ce qu'ils puissent être utilisés.

10
paulmorriss

I a écrit une entrée de blog sur la mise en miroir et la TDE.

Il m'a fallu un certain temps pour comprendre que pour obtenir la DB sur le serveur secondaire, j'avais besoin de la ligne de code:

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

Le mot de passe est identique à celui que j'ai utilisé pour chiffrer le fichier principal de la clé. Après avoir délivré la commande sur le 2e serveur SQL, tout a joué bien. ICI est le message db.stackexchange que j'ai fait aussi.

8
RateControl