3

.NET 框架版本 = 4.6.2,数据库 = SQL Server 2016

应用类型 = Windows 服务

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

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

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

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

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

4

2 回答 2

2

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

从消息中Keyset does not exist我假设您只导入了部分密钥或仅导入集合的一部分。

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

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

于 2017-07-28T07:56:16.593 回答
2

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

于 2018-06-20T11:55:10.043 回答