Przywróć zaszyfrowaną bazę danych na innym serwerze

10

Korzystam z produktu działającego w SQLServer 2008. Zrozumiałe jest, że firma, która go dostarcza, nie oferuje obsługi SQLServer. Podczas instalacji produktu podałem hasło do zaszyfrowania bazy danych. Chciałbym uruchomić kolejną kopię produktu w celu przetestowania na innym serwerze. Przywróciłem bazę danych na inny serwer i zainstalowałem produkt na tym innym serwerze. Po zainstalowaniu podałem to samo hasło, a następnie przywróciłem kopię zapasową z głównego serwera. Jednak pojawia się komunikat o błędzie:

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

z produktu. Mogę uzyskać dostęp do tabel za pomocą SQLServer Management studio.

Próbowałem tego:

na pierwszym serwerze:

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

na drugim serwerze:

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

Próbowałem również na drugim serwerze:

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

ale to dało komunikat o błędzie dotyczący klucza asymetrycznego.

Jak mogę przywrócić kopię zapasową z pierwszego serwera na drugi serwer?

Aktualizacja:

W bazie danych znajduje się również klucz asymetryczny i symetryczny. Jeśli otworzę klucz symetryczny za pomocą klucza asymetrycznego, otrzymam ten sam błąd, więc myślę, że właśnie dlatego nie działa - w jakiś sposób klucze nie są przesyłane w taki sposób, że można ich użyć.

paulmorriss
źródło

Odpowiedzi:

8

I napisał blogu wpis o mirroring i TDE.

Zajęło mi trochę czasu, aby dowiedzieć się, że aby uzyskać db na serwerze pomocniczym, potrzebowałem linii kodu:

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

Hasło jest takie samo, jak używane do szyfrowania pliku klucza głównego. Po wydaniu polecenia na 2. serwerze SQL wszystko grało ładnie. Oto post db.stackexchange, który również napisałem.

RateControl
źródło
Ten wpis na blogu jest przydatny. Postępowałem zgodnie z tym, ale zamiast „master” używam konkretnej bazy danych, którą chcę skopiować. Pojawia się błąd „Wystąpił błąd podczas odszyfrowywania asymetrycznego klucza„ asym_something ”, który został zaszyfrowany przez stary klucz główny. Opcji FORCE można użyć do zignorowania tego błędu i kontynuowania operacji, ale danych, których stary klucz główny nie może odszyfrować stanie się niedostępny ”. kiedy przywracam klucz główny z pliku. Czy powinienem to FORCE? (To jest po tym, jak przywróciłem bazę danych, podczas gdy twoje instrukcje mają później przywrócić).
paulmorriss,
1
Dzięki, zrozumienie tego zajęło mi dużo czasu. eek, nie jestem pewien, czy powinieneś to wymusić. W moim rozumieniu „klucze” są powiązane z bazami danych MASTER na każdym serwerze. Jedyną rzeczą związaną z bazą danych jest certyfikat podpisany przez klucz główny. Musisz więc utworzyć klucz główny na serwerze 1, wykonać kopię zapasową, a następnie przywrócić klucz na serwerze 2. Następnie przejdź do certyfikatu dla bazy danych. Mam nadzieję, że ktoś inny rzuci nieco światła na ten temat.
RateControl