Відновлення зашифрованої бази даних на інший сервер


10

Я використовую продукт, який працює на SQLServer 2008. Зрозуміло, що компанія, що постачає його, не пропонує підтримки SQLServer. Коли я встановив продукт, я вказав пароль для шифрування бази даних. Я хотів би запустити ще одну копію продукту для тестування на іншому сервері. Я відновив базу даних на іншому сервері та встановив продукт на цьому іншому сервері. Коли я встановив його, я подав той же пароль, а потім відновив резервну копію з основного сервера. Однак я отримую повідомлення про помилку:

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

від продукту. Я можу отримати доступ до таблиць за допомогою студії SQLServer Management.

Я спробував це:

на першому сервері:

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

на другому сервері:

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

Я також спробував це на другому сервері:

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

але це дало повідомлення про помилку щодо асиметричного ключа.

Як я можу відновити резервну копію з першого сервера на другий сервер?

Оновлення:

У базі даних є також асиметричний і симетричний ключ. Якщо я відкриваю симетричний ключ за допомогою асиметричного ключа, я отримую ту ж помилку, тому я думаю, що саме тому він не працює - якось ключі не передаються таким чином, щоб їх можна було використовувати.

Відповіді:


8

Я написав запис у блозі про дзеркальне відображення та TDE.

Мені знадобилося деякий час, щоб зрозуміти, що для отримання db на вторинному сервері мені знадобився рядок коду:

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

Пароль такий самий, як і для шифрування файлу головного ключа. Після видачі команди на 2-му сервері SQL все грало добре. Ось і db.stackexchange пост, який я також зробив.


Цей запис у блозі є корисним. Я дотримувався цього, за винятком того, що замість "майстра" я використовую конкретну базу даних, яку хочу скопіювати. Я отримую помилку "Під час розшифрування асиметричного ключа" asym_something ", який був зашифрований старим головним ключем, сталася помилка. Параметр FORCE може використовуватися для ігнорування цієї помилки та продовження операції, але дані, які не можуть бути розшифровані старим головним ключем стане недоступним ". коли я відновлю головний ключ з файлу. Чи варто ВЗАЄМО це? (Це після того, як я відновив базу даних, тоді як ваші вказівки будуть відновлені згодом.)
paulmorriss

1
Дякую, мені було потрібно далеко, щоб довго це зрозуміти. Еек, я не впевнений, що ти повинен це змусити. Як я це розумію, "ключі" прив'язуються до баз даних MASTER на кожному сервері. Єдине, що прив’язане до бази даних - це cert, який підписується головним ключем. Отже, вам потрібно створити головний ключ на сервері1, створити резервну копію, а потім відновити ключ на сервері 2. Потім перемістити курт на базу даних. Я сподіваюся, що хтось інший може пролити трохи світла на цю тему.
RateControl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.