Ошибка 33111 при восстановлении резервных копий из старых версий Соединителя SQL Server для Microsoft Azure Key Vault
Исходный номер базы знаний: 4470999
В этой статье описывается ошибка, возникающая при попытке восстановить резервную копию прозрачное шифрование данных (TDE), созданную на серверах, использующих старые версии соединителя SQL Server для Microsoft Azure Key Vault.
Симптомы
При попытке восстановить резервную копию базы данных из SQL Server, использующую соединитель SQL Server для Key Vault 1.0.4.0 или более раннюю версию, чтобы Соединитель SQL Server для Microsoft Azure Key Vault 1.0.5.0.
Предположим, что развертываются следующие экземпляры Microsoft SQL Server:
В экземпляре
sql1
SQL Server развернут соединитель SQL Server для Key Vault 1.0.4.0.В экземпляре
sql2
SQL Server развернут соединитель SQL Server для Key Vault 1.0.5.0.Используйте следующий запрос, чтобы развернуть асимметричный ключ в обоих
sql1
экземплярахsql2
из одного и того же источника асимметричного ключа в Key Vault:CREATE ASYMMETRIC KEY TDE_KEY FROM PROVIDER AzureKeyVaultProvider WITH PROVIDER_KEY_NAME = 'key1', CREATION_DISPOSITION = OPEN_EXISTING
Если просмотреть значение отпечатков на обоих серверах, вы заметите, что длина отпечатка отличается, хотя они создаются из одного источника. Отпечаток версии 1.0.5.0 превышает версию 1.0.4.0.
Пример отпечатка 1.0.4.0:
0x2C5677D76F76D77F80
Пример отпечатка 1.0.5.0:
0x373B314B78E8D59A0925494558FEF14B726216C5
Это изменение приводит к возникновению проблем во время операций резервного копирования и восстановления.
Пример:
У вас есть резервная копия базы данных, зашифрованная асимметричным ключом в Key Vault в экземпляре sql1
.
Экземпляр sql2
имеет асимметричный ключ.
При попытке восстановить резервную копию экземпляра sql2
операция завершается ошибкой и возвращает сообщение об ошибке, похожее на следующее сообщение:
Msg 33111, Level 16, State 4, LineNumber <>
Не удается найти асимметричный ключ сервера с отпечатком "0x2C5677D76F76D77F80".
Примечания:
Запрос, который требуется получить отпечаток каждого ключа, выглядит следующим образом:
SELECT thumbprint, * FROM master.sys.asymmetric_keys
Запрос для получения отпечатка каждой базы данных TDE выглядит следующим образом:
SELECT DatabaseName(ddek.database_id) AS DatabaseName, ak.name
AS [Asymmetric key Name], ak.thumbprint FROM
sys.dm_database_encryption_keys ddek INNER JOIN
master.sys.asymmetric_keys ak ON
ak.thumbprint = ddek.encryptor_thumbprint
Причина
Обновление появилось в версии 1.0.5.0 соединителя SQL Server для Key Vault, которое изменяет способ вычисления отпечатков программы. В версии 1.0.5.0 это вычисление соответствует логике, используемой подсистемой программ для поддержки следующего сценария миграции:
Из: локальный Microsoft SQL Server, использующий расширяемое управление ключами (EKM)
To: База данных SQL Microsoft Azure, использующий поддержку использования собственного ключа (BYOK) для прозрачное шифрование данных (TDE)
Из-за этого изменения могут возникнуть проблемы при попытке восстановить резервные копии базы данных из версии 1.0.4.0 или более ранней версии.
Решение
Скопируйте соединитель SQL Server для Key Vault 1.0.4.0 или более раннюю версию на сервер экземпляра
sql2
.Выполните следующий запрос на сервере
sql2
, чтобы изменить версиюCRYPTOGRAPHIC PROVIDER
1.0.4.0:ALTER CRYPTOGRAPHIC PROVIDER AzureKeyVaultProvider FROM FILE = 'FilePath\FileName\SQL Server Connector for Microsoft Azure Key Vault\1.0.4.0\Microsoft.AzureKeyVaultService.EKM.dll'
Перезапуск SQL Server.
Создайте асимметричный ключ с помощью
CRYPTOGRAPHIC PROVIDER
1.0.4.0.CREATE ASYMMETRIC KEY TDE_KEY_1040 FROM PROVIDER AzureKeyVaultProvider WITH PROVIDER_KEY_NAME = 'key1', CREATION_DISPOSITION = OPEN_EXISTING
Вы можете подтвердить существование обоих асимметричных ключей с помощью следующего запроса:
SELECT thumbprint,* FROM master.sys.asymmetric_keys
Добавьте учетные данные в асимметричное сопоставление имени входа (TDE_Login в следующем примере) с помощью запроса, аналогичного следующему запросу:
ALTER LOGIN [Contoso\DomainUser] DROP CREDENTIAL sysadmin_ekm_cred; ALTER LOGIN TDE_Login ADD CREDENTIAL sysadmin_ekm_cred;
Теперь вы сможете восстановить резервную копию.
Выполните следующий запрос
sql2
, чтобы вернутьсяCRYPTOGRAPHIC PROVIDER
к версии 1.0.5.0.ALTER CRYPTOGRAPHIC PROVIDER AzureKeyVaultProvider FROM FILE = 'FilePath\FileName\SQL Server Connector for Microsoft Azure Key Vault\1.0.5.0\Microsoft.AzureKeyVaultService.EKM.dll'
Перезапуск SQL Server.
Чтобы использовать новый отпечаток, выполните следующий запрос с помощью того же асимметричного ключа или нового асимметричного ключа версии.
ALTER DATABASE ENCRYPTION KEY ENCRYPTION BY SERVER ASYMMETRIC KEY <KeyName_1.0.5.0_version>