Проблема миграции и шифрования SQL Server

У меня небольшое затруднение, с которым мне нужна помощь. Мы находимся в процессе миграции версии SQL Server 2014 Enterprise с локальной системы на систему AWS SQL Server 2017 Enterprise.

Текущая система содержит как TDE, так и шифрование с симметричным ключом для шифрования на уровне столбцов. Здесь начинается самое интересное. Я могу восстановить базу данных до нового экземпляра 2017 года, и после восстановления TDE работает без проблем. Шифрование на уровне столбца с симметричным ключом не работает.

Симметричное шифрование, созданное с использованием следующего кода:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'passwowrd'; 
CREATE CERTIFICATE AUPW WITH SUBJECT = 'AccountsUsers-Credentials'; 
CREATE SYMMETRIC KEY AccountsUsers_Credentials
    WITH ALGORITHM = AES_256 
    ENCRYPTION BY CERTIFICATE AUPW;

Затем я предпринимаю следующие шаги, пытаясь восстановить главный ключ и симметричные ключи на новых серверах.

На экземпляре SQL Server 2014:

OPEN MASTER KEY DECRYPTION BY PASSWORD = N'password';
GO
BACKUP MASTER KEY
    TO FILE = N'...\MSSQL\DATA\masterkey.dmk'
    ENCRYPTION BY PASSWORD = 'password'
GO
BACKUP CERTIFICATE AUPW
    TO FILE ='...\MSSQL\DATA\AUPW.cer'  
      WITH PRIVATE KEY   
      (FILE ='...\MSSQL\DATA\AUPW.pk', ENCRYPTION BY PASSWORD ='password')   

На экземпляре SQL Server 2017 после восстановления БД и проверки работы TDE и доступности БД я пытаюсь запустить следующий код:

USE NewDB
GO
RESTORE MASTER KEY 
FROM FILE = N'...\MSSQL\DATA\Masterkey.dmk'
decryption by password = 'password'
encryption by password = 'password'
GO

CREATE CERTIFICATE AUPW FROM FILE ='...\MSSQL\DATA\AUPW.cer'
WITH PRIVATE KEY(FILE='...\MSSQL\DATA\AUPW.pk',
DECRYPTION BY PASSWORD='password',
ENCRYPTION BY PASSWORD='password');

Однако когда я запускаю команду RESTORE MASTER KEY, я получаю следующую ошибку:

Msg 15329, уровень 16, состояние 30, строка 43
Текущий главный ключ не может быть расшифрован. Если это главный ключ базы данных, вы должны попытаться открыть его в сеансе перед выполнением этой операции. Параметр FORCE можно использовать, чтобы игнорировать эту ошибку и продолжить операцию, но данные, зашифрованные старым главным ключом, будут потеряны.

Я попытался открыть главный ключ и получил сообщение об ошибке, но использую тот же пароль, который использовал для его открытия при резервном копировании DBMK.

Msg 15313, уровень 16, состояние 1, строка 41
Ключ не зашифрован с помощью указанного дешифратора.

Опция принудительного действия тоже не работает, равно как и создание нового мастер-ключа.

Кто-нибудь видит, что, черт возьми, я здесь делаю неправильно? Единственное, что я могу сделать прямо сейчас, - это отключить все шифрование перед миграцией, но я не очень-то фанат этой опции.

Цените помощь.


person Nathan Heaivilin    schedule 17.05.2020    source источник


Ответы (1)


Причина ошибки в месте назначения связана с тем, что главный ключ службы (на уровне экземпляра SQL Server) отличается в месте назначения от исходного.

Главный ключ базы данных зашифрован служебным главным ключом на исходном сервере. См. статью

Шифрование на SQL Server

Итак, в источнике сначала вам нужно отказаться от шифрования с помощью главного ключа службы и добавить дополнительное шифрование по паролю, прежде чем делать резервную копию.


alter master key add encryption by password = 'Pass@1234'

alter master key drop encryption by service master key

Опубликуйте восстановление в месте назначения, вы должны выполнить следующие шаги:


open master key decryption by password = 'Pass@1234'

alter master key add encryption by service master key

alter master key drop encryption by password = 'Pass@1234'

См. Статьи ниже:

person Venkataraman R    schedule 18.05.2020
comment
Это было именно то, что мне было нужно. Сегодня вечером я выполнил пробный прогон, выполнив следующие действия, и он сработал именно так, как сказано в статье о восстановлении. Спасибо. - person Nathan Heaivilin; 21.05.2020