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