現象
次のような状況で問題が発生します。
-
SQL Server 2016 または Azure SQL データベースで 常に暗号化さ れている Microsoft .net Framework アプリケーションを使用している。
-
これらのアプリケーションの列マスターキーは、Azure Key Vault に保存されています。
このシナリオでは、アプリケーションのパフォーマンスがデッドロックされます。 そのため、アプリケーションが応答しなくなったり、ハングしたりする場合があります。
デッドロックは、Azure Key Vault の認証トークンを取得または更新しようとしているときに発生する可能性があります。
原因
アプリケーションがデータベース内の暗号化された列を照会すると、SQL Server 用の .net Framework データプロバイダーは、 常に暗号化されている Azure Key Vault プロバイダーを呼び出します。これにより、Azure Key Vault のトークンを取得または更新するアプリケーションベースの非同期タスクが呼び出されます。このコードパスは、常に暗号化された NuGet パッケージバージョン 2.0. x と 1. x. x との非同期メソッドの呼び出しによってデッドロックが発生する可能性があります。
解決方法
この問題は、常に暗号化されたバージョン2.1.0 の Azure Key Vault Providerで最初に修正されました。常に暗号化された Azure Key Vault providerを使っている場合は、常に暗号化されたバージョンの2.1.0 以降で Azure key Vault プロバイダーを使うように、アプリケーションを再構築して再展開することを強くお勧めします。