Stellen Sie die verschlüsselte Datenbank auf einem anderen Server wieder her

10

Ich verwende ein Produkt, das auf SQLServer 2008 ausgeführt wird. Verständlicherweise bietet das Unternehmen, das es bereitstellt, keine SQLServer-Unterstützung an. Bei der Installation des Produkts habe ich ein Kennwort zum Verschlüsseln der Datenbank angegeben. Ich möchte eine weitere Kopie des Produkts zum Testen auf einem anderen Server ausführen. Ich habe die Datenbank auf einem anderen Server wiederhergestellt und das Produkt auf diesem anderen Server installiert. Bei der Installation habe ich dasselbe Kennwort angegeben und dann eine Sicherung vom Hauptserver wiederhergestellt. Ich erhalte jedoch die Fehlermeldung:

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

vom Produkt. Ich kann mit SQLServer Management Studio auf die Tabellen zugreifen.

Ich habe das versucht:

auf dem ersten Server:

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

auf dem zweiten Server:

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

Ich habe dies auch auf dem zweiten Server versucht:

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

Dies ergab jedoch eine Fehlermeldung über einen asymmetrischen Schlüssel.

Wie kann ich die Sicherung vom ersten Server auf dem zweiten Server wiederherstellen?

Aktualisieren:

Es gibt auch einen asymmetrischen und einen symmetrischen Schlüssel in der Datenbank. Wenn ich den symmetrischen Schlüssel mit dem asymmetrischen Schlüssel öffne, wird der gleiche Fehler angezeigt. Ich denke, deshalb funktioniert er nicht - irgendwie werden die Schlüssel nicht so übertragen, dass sie verwendet werden können.

Paulmorriss
quelle

Antworten:

8

Ich schrieb einen Blog - Eintrag über die Spiegelung und TDE.

Es dauerte eine Weile, bis ich herausgefunden hatte, dass ich die Codezeile brauchte, um die Datenbank auf den sekundären Server zu bekommen:

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

Das Passwort ist das gleiche, mit dem ich die Hauptschlüsseldatei verschlüsselt habe. Nach der Ausgabe des Befehls auf dem 2. SQL Server lief alles gut. Hier ist der Beitrag von db.stackexchange, den ich auch gemacht habe.

RateControl
quelle
Dieser Blogeintrag ist nützlich. Ich habe es befolgt, außer dass ich anstelle von "master" die bestimmte Datenbank verwende, die ich kopieren möchte. Ich erhalte die Fehlermeldung "Beim Entschlüsseln des asymmetrischen Schlüssels 'asym_something', der mit dem alten Hauptschlüssel verschlüsselt wurde, ist ein Fehler aufgetreten. Mit der Option FORCE kann dieser Fehler ignoriert und der Vorgang fortgesetzt werden, Daten können jedoch nicht mit dem alten Hauptschlüssel entschlüsselt werden wird nicht mehr verfügbar sein. " wenn ich den Hauptschlüssel aus der Datei wiederherstelle. Soll ich es erzwingen? (Dies ist, nachdem ich die Datenbank wiederhergestellt habe, während Ihre Anweisungen die Wiederherstellung später haben.)
Paulmorriss
1
Danke, ich habe viel zu lange gebraucht, um es herauszufinden. Ich bin mir nicht sicher, ob du es erzwingen sollst. So wie ich es verstehe, sind die "Schlüssel" an die MASTER-Datenbanken auf jedem Server gebunden. Das einzige, was an die Datenbank gebunden ist, ist das Zertifikat, das vom Hauptschlüssel signiert wird. Sie müssen also einen Hauptschlüssel auf Server1 erstellen, ihn sichern und dann den Schlüssel auf Server 2 wiederherstellen. Verschieben Sie dann das Zertifikat für die Datenbank. Ich hoffe, jemand anderes kann etwas Licht in das Thema bringen.
RateControl