使用密钥存储提供程序解密列加密密钥失败:'AZURE_KEY_VAULT'

时间:2019-08-31 04:56:05

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

我在Azure上的数据库上的数据库表列中使用了Always encrypted。我已经仔细阅读了这篇文章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密钥库中的密钥有关。我想念什么?

2 个答案:

答案 0 :(得分:1)

好的,所以知道了。绝对是权限问题。为了完全验证您是否具有正确的权限,请转到 Key Vault 刀片服务器:

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

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

答案 1 :(得分:0)

  

从“密钥”权限下拉列表中,确保将其授予“解密”,“签名”,“获取”,“ UnwrapKey”权限

就我而言,必须包括“验证” 。没有该许可,我继续出现以下错误:

Failed to decrypt a column encryption key using key store provider: 'AZURE_KEY_VAULT'.