KB4016853-修复:应用尝试通过 Azure 密钥保管库提供程序获取或刷新身份验证令牌以始终加密时出现死锁

症状

请考虑以下情况:

  • 你拥有在 SQL Server 2016 或 Azure SQL 数据库中 始终加密 的 Microsoft .net Framework 应用程序。

  • 这些应用程序的列主密钥存储在 Azure Key Vault 中。

在此方案中,应用程序体验死锁。 因此,应用程序将停止响应(挂起)或超时。 

在尝试获取或刷新 Azure Key Vault 的身份验证令牌的过程中,可能会发生死锁。

原因

当应用程序在数据库中查询加密的列时,SQL Server 的 .net Framework 数据提供程序将调用Azure Key 保管库提供程序以进行始终加密。这反过来会调用基于应用程序的异步任务,该任务获取或刷新 Azure Key Vault 的令牌。Azure Key Vault 提供程序中的此代码路径,用于始终加密的 NuGet 程序包版本2.0。 x 和 a.x 很容易出现死锁,因为它以不正确的方式调用某些异步方法。

解决方案

始终加密版本2.1.0 的 Azure Key 保管库提供程序中,此问题首先已修复。如果你使用 Always encrypted 和 Azure 密钥保管库提供程序,我们强烈建议你重新生成和重新部署你的应用程序,以使其 对始终加密的版本2.1.0 或更高版本使用 Azure Key Vault 提供程序

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×