始终加密的功能 - 无法解密列。来自 Windows-Service App 的呼叫

Always Encrypted Feature - Failed to decrypt column. Call from Windows-Service App

.NET 框架版本 = 4.6.2 , 数据库 = SQL 服务器 2016

应用程序类型 = Windows 服务

我们正在研究 SQL 2016 数据库中的 "Always Encrypted" 功能,以对某些客户数据列执行加密。我们的 Web 应用程序是在 ASP.NET MVC 架构中构建的,并且可以很好地使用这个新功能。我们已将证书从数据库服务器复制并导入到 IIS Web 服务器。网络应用程序运行顺利。

但是当我们尝试从单独服务器上的 windows 服务应用程序 运行 访问数据库时,它会抛出以下异常。

无法解密列 'ColumnX'。 无法使用密钥库提供程序解密列加密密钥:'MSSQL_CERTIFICATE_STORE'。加密列加密密钥的最后 10 个字节是:'76-34-51-DA-41-8F-52-D1-A1-EE'。 密钥集不存在

我们已经使用类似的步骤将相同的证书复制并导入到服务器 运行 windows-服务应用程序。

如果我在证书安装中遗漏了什么,请提出建议。我们是否需要编辑已安装证书中的某些属性?

Always Encrypted 功能要求想要访问数据库的用户同时拥有 public 和私钥。

根据消息 Keyset does not exist,我假设您只导入了部分密钥或仅导入了一组密钥。

编辑
您有权访问这些项目吗? %ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys 要么 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

通常是当私钥丢失或访问 MachineKey 文件夹(注册表)时出现一些权限错误。它给出 "Keyset does not exist" 错误。

我也遇到了这个问题,并在将帐户的用户访问级别更改为管理员后得到解决。但是 运行 以管理员身份处理可能是一个安全问题,