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

10

J'utilise un produit qui fonctionne sur SQLServer 2008. Naturellement, la société qui le fournit n'offre pas de support SQLServer. Lorsque j'ai installé le produit, j'ai spécifié un mot de passe pour crypter la base de données. Je voudrais exécuter une autre copie du produit pour le tester sur 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 à l'aide de 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 également 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 également une clé asymétrique et symétrique dans la base de données. Si j'ouvre la clé symétrique en utilisant la clé asymétrique, j'obtiens la même erreur, donc 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 à pouvoir être utilisées.

paulmorriss
la source

Réponses:

8

J'ai écrit une entrée de blog sur la mise en miroir et TDE.

Il m'a fallu un certain temps pour comprendre que pour obtenir la base de données 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 le même que celui que j'ai utilisé pour crypter le fichier de clé principale. Après avoir émis la commande sur le 2ème serveur SQL, tout s'est bien passé. Voici également le post db.stackexchange que j'ai fait.

RateControl
la source
Cette entrée de blog est utile. Je l'ai suivi sauf qu'au lieu de "maître" j'utilise la base de données particulière que je veux copier. J'obtiens l'erreur "Une erreur s'est produite lors du déchiffrement de la clé asymétrique 'asym_something' qui a été chiffrée par l'ancienne clé principale. L'option FORCE peut être utilisée pour ignorer cette erreur et continuer l'opération, mais les données qui ne peuvent pas être déchiffrées par l'ancienne clé principale deviendra indisponible. " lorsque je restaure la clé principale à partir du fichier. Dois-je le FORCER? (C'est après avoir restauré la base de données, alors que vos instructions ont la restauration plus tard.)
paulmorriss
1
Merci, il m'a fallu beaucoup de temps pour le comprendre. eek, je ne suis pas sûr que tu devrais le forcer. D'après ce que je comprends, les "clés" sont liées aux bases de données MASTER sur chaque serveur. La seule chose qui est liée à la base de données est le certificat signé par la clé principale. Vous devez donc créer une clé principale sur server1, la sauvegarder, puis restaurer la clé sur le serveur 2. Ensuite, déplacez le certificat pour la base de données. J'espère que quelqu'un d'autre pourra faire la lumière sur le sujet.
RateControl