以前のバージョンのSQL Server コネクタ for Microsoft Azure Key Vaultからバックアップを復元するときのエラー 33111
元の KB 番号: 4470999
この記事では、Microsoft Azure Key Vault に対して古いバージョンの SQL Server Connector を使用するサーバーで行われた Transparent Data Encryption (TDE) バックアップを復元しようとすると発生するエラーについて説明します。
現象
Sql Server Connector for Key Vault 1.0.4.0 以前のバージョンを使用する SQL Server から SQL Server コネクタ for Microsoft Azure Key Vault 1.0.5.0 にデータベース バックアップを復元しようとすると、問題が発生します。
Microsoft SQL Server の次のインスタンスをデプロイするとします。
SQL Server インスタンス
sql1
には、SQL Server Connector for Key Vault 1.0.4.0 がデプロイされています。SQL Server インスタンス
sql2
には、SQL Server Connector for Key Vault 1.0.5.0 がデプロイされています。次のクエリを使用して、Key Vault 内の同じ非対称キー ソースの
sql1
インスタンスとsql2
インスタンスの両方に非対称キーをデプロイします。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
この変更により、バックアップ操作と復元操作中に問題が発生します。
例:
sql1
インスタンスの Key Vault の非対称キーによって暗号化されたデータベース バックアップがあります。
sql2
インスタンスには非対称キーが作成されています。
sql2
インスタンスでバックアップを復元しようとすると、操作は失敗し、次のメッセージのようなエラー メッセージが返されます。
メッセージ 33111、レベル 16、状態 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
原因
SQL Server Connector for Key Vault のバージョン 1.0.5.0 で更新プログラムが導入され、プログラムによる拇印の計算方法が変更されました。 バージョン 1.0.5.0 では、この計算は、次の移行シナリオをサポートするためにプログラム エンジンによって使用されるロジックと一致します。
From: Extensible Key Management (EKM) を使用するオンプレミスの Microsoft SQL Server
To: Transparent Data Encryption (TDE) に Bring Your Own Key (BYOK) サポートを使用する Microsoft Azure SQL Database
この変更のため、バージョン 1.0.4.0 以前のバージョンからデータベース バックアップを復元しようとすると、問題が発生する可能性があります。
解決方法
Sql Server Connector for 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>