【问题标题】:Failed to decrypt a column encryption key using key store provider: 'AZURE_KEY_VAULT'无法使用密钥存储提供程序解密列加密密钥:“AZURE_KEY_VAULT”
【发布时间】:2019-08-31 04:56:05
【问题描述】:

我已将 Always encrypted 用于 Azure 数据库上的数据库表列。我已经阅读了这篇文章 - https://docs.microsoft.com/en-us/azure/sql-database/sql-database-always-encrypted-azure-key-vault - 非常仔细地阅读了它。我已经加密了这些列,并且成功完成了。我可以看到该列已加密。

当我尝试按照同一篇文章现在尝试查看应用程序中的数据时,我收到错误说明:

无法使用密钥存储提供程序解密列加密密钥: “AZURE_KEY_VAULT”。验证列加密密钥的属性 及其数据库中的列主密钥。的最后 10 个字节 加密列加密密钥为:'54-36-01-E0-5C-A1-82-80-B1-B4'。

这是代码中的错误,但是在我放开那个错误之后,我得到:

访问被拒绝。在任何访问策略中都找不到调用者。呼叫者: appid=afd26169-bbac-4a45-ad3c-2b4492d19c6e;oid=dabbc750-5601-442b-9809-3a17f74d5aa2;numgroups=0;iss=https://sts.windows.net/bd8eb048-c497-4576-80eb-99e763b83ffd/ 保险柜:AWKeyVault2;location=eastus2

值得注意的是,当我使用SSMS时,我将连接字符串选项设置为Column Encryption Setting=Enabled,我可以在SSMS中看到解密后的数据。

在大多数情况下,我认为这是一个权限问题,但我不知所措。我已授予应用注册对 Azure 订阅的完全访问权限。我也为应用程序注册生成了一个“秘密”,并在应用程序中使用它。如果我可以看到来自 SSMS 的数据,我认为这意味着加密成功,所以这一定与应用程序无法获取 azure 密钥库中的密钥这一事实有关。我错过了什么?

【问题讨论】:

    标签: sql-server azure encryption azure-keyvault always-encrypted


    【解决方案1】:

    好的,所以想通了。这绝对是一个权限问题。为了完全验证您是否拥有正确的权限,请转到 Key Vault Blade:

    • 从左侧的 Key Vault 资源刀片菜单中选择访问策略
    • 点击顶部的“添加新”链接/按钮
    • 选择 Principal 以选择您正在使用的应用程序(即您从中获取客户端 ID 的应用程序注册)
    • 从“密钥权限”下拉列表中,确保您授予它“解密”、“签名”、“获取”、“解包密钥”权限
    • 确保保存更改

    这是最后一件事 - 您仍然必须确保您的应用注册具有正确的订阅权限。

    【讨论】:

    • 你可以接受自己作为答案。这对其他社区成员可能是有益的。谢谢。
    • 非常感谢您的回答。
    猜你喜欢
    • 2023-02-01
    • 2021-01-24
    • 1970-01-01
    • 2022-07-23
    • 2022-12-09
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多