无法使用密钥存储提供程序解密列加密密钥:“AZURE_KEY_VAULT”

M.R*_*.R. 5 sql-server encryption azure azure-keyvault always-encrypted

我已用于Always encryptedAzure 上数据库上的数据库表列。我已经阅读了这篇文章 - https://learn.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;位置=eastus2

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

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

M.R*_*.R. 10

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

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

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

  • 非常感谢您的回答。 (2认同)