Ripristina database crittografato su un altro server


10

Sto usando un prodotto che gira su SQL Server 2008. Comprensibilmente la società che lo fornisce non offre supporto SQL Server. Quando ho installato il prodotto ho specificato una password per crittografare il database. Vorrei eseguire un'altra copia del prodotto per il test su un altro server. Ho ripristinato il database su un altro server e ho installato il prodotto su quell'altro server. Quando l'ho installato ho fornito la stessa password, quindi ho ripristinato un backup dal server principale. Tuttavia sto ricevendo il messaggio di errore:

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

dal prodotto. Posso accedere alle tabelle utilizzando SQLServer Management Studio.

Ho provato questo:

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

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

Ho anche provato questo sul secondo server:

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

ma questo ha dato un messaggio di errore su una chiave asimmetrica.

Come posso ripristinare il backup dal primo server sul secondo server?

Aggiornare:

Esiste anche una chiave asimmetrica e simmetrica nel database. Se apro la chiave simmetrica usando la chiave asimmetrica ottengo lo stesso errore, quindi penso che sia per questo che non funziona - in qualche modo le chiavi non vengono trasferite in modo tale da poter essere utilizzate.

Risposte:


8

Ho scritto un post sul blog su mirroring e TDE.

Mi ci è voluto un po 'per capire che per ottenere il db sul server secondario, avevo bisogno della riga di codice:

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

La password è la stessa che ho usato per crittografare il file della chiave principale. Dopo aver emesso il comando sul secondo server SQL, tutto ha funzionato bene. Ecco il post di db.stackexchange che ho scritto anche.


Quel post sul blog è utile. L'ho seguito tranne che invece di "master" uso il database particolare che voglio copiare. Ottengo l'errore "Si è verificato un errore durante la decrittografia della chiave asimmetrica 'asym_something' che è stata crittografata dalla vecchia chiave principale. L'opzione FORCE può essere utilizzata per ignorare questo errore e continuare l'operazione, ma i dati che non possono essere decrittati dalla vecchia chiave principale diventerà non disponibile. " quando ripristino la chiave principale dal file. Dovrei forzarlo? (Questo è dopo che ho ripristinato il database, mentre le tue istruzioni hanno il ripristino in seguito.)
paulmorriss

1
Grazie, mi ci è voluto molto per capirlo. eek, non sono sicuro che dovresti forzarlo. Per come la capisco, le "chiavi" sono legate ai database MASTER su ciascun server. L'unica cosa legata al database è il certificato firmato dalla chiave master. Quindi è necessario creare una chiave master sul server1, eseguirne il backup, quindi ripristinare la chiave sul server 2. Quindi passare al certificato per il database. Spero che qualcun altro possa far luce sull'argomento.
RateControl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.