【问题标题】:Always Encrypted SQL Server 2016 times out in AzureAzure 中的 Always Encrypted SQL Server 2016 超时
【发布时间】:2017-05-18 19:03:16
【问题描述】:

我有一个包含几个加密列的表。数据库和 Web 应用程序都托管在 Azure 上。如果我在本地运行 Web 应用程序,则代码可以正常工作,并且我可以按预期从表中获取解密数据。但是,当我将我的 Web 应用程序发布到 Azure 时,当应用程序尝试从加密表中读取时,我会遇到超时。加密密钥存储在 Azure Key Vault 中。我在连接字符串中使用带有“Column Encryption Settings = Enabled”设置的实体框架。

有什么想法吗?

【问题讨论】:

  • 有什么想法吗?是的,measure 花费的时间在哪里。隔离问题。它是否也会在没有加密的情况下发生?您是否查看过来自 Azure Query Performance Insight 的任何警告?
  • 没有加密就不会发生。它也不会发生在其他桌子上。只是加密的。

标签: sql entity-framework azure-sql-database azure-keyvault always-encrypted


【解决方案1】:

事实证明,最新版本的 Microsoft.IdentityModel.Clients.ActiveDirectory dll (3.X) 在异步调用方面表现不佳。 AcquireTokenAsync 方法一直超时。

我回滚到 dll 的 2.X 版本,现在它工作正常。起初,我使用的是 AcquireToken(非异步)方法,但当我也尝试了 Async 方法时,我发现它也有效。显然问题一直出在 DLL 上。

关于该主题的更多信息: https://github.com/Azure/azure-sdk-for-net/issues/1432

【讨论】:

    【解决方案2】:

    您使用的是什么版本的 Azure Key Vault Provider?

    已知旧版本的 Azure Key Vault Provider 会导致此问题,您可以尝试将提供程序升级到 latest version

    【讨论】:

    • 嗨。我使用的是最新版本的 AKV 提供程序,而 Microsoft.IdentityModel.Clients.ActiveDirectory 命名空间的 AcquireTokenAsync 方法显然导致了死锁。问题是我没有一直使用 async/await。我真的不知道该怎么做,因为我在重写的 SqlColumnEncryptionKeyStoreProvider 类中调用它,我将它添加到 SQLConnection 的加密密钥存储提供程序中。将 ActiveDirectory dll 降级到具有 AcquireToken 方法(非异步)的旧版本现在解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    相关资源
    最近更新 更多