.NET Framework = 4.6.2,Database = Server 2016
应用程序类型= Windows
我们正在开发SQL 2016 db中的“始终加密”功能,以便对某些客户数据列执行加密操作。我们的web应用程序是在ASP.NET MVC架构中构建的,并且能够很好地处理这个新特性。我们已经将证书从数据库服务器复制并导入到IIS web服务器。而且网络应用程序运行得很顺利。
但是,当我们试图从运行在单独服务器上的windows服务应用程序访问DB时,它会引发以下异常。
无法解密列“ColumnX”。使用密钥存储提供程序:‘MSSQL_证书_存储’解密列加密密钥失败。加密列加密密钥的最后10个字节是:'76-34-51-DA-41-8F-52-D1-A1-EE‘。密钥集不存在
我们用类似的步骤复制和导入了相同的证书到运行windows-service应用程序的服务器上。
如果我在证书安装中遗漏了什么,请提出建议。是否需要编辑已安装证书中的属性?
发布于 2017-07-28 07:56:16
始终加密的功能要求希望访问数据库的用户同时拥有公钥和私钥。
从消息Keyset does not exist中,我假设您只导入了部分或仅一部分的密钥。
编辑
您可以访问这些项目吗?%ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys或C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
通常,当私钥丢失或访问MachineKey文件夹(注册表)时出现权限错误时。它给出了"Keyset does not exist"错误。
发布于 2018-06-20 11:55:10
我也面临这个问题,并在更改管理员帐户的用户访问级别时解决了这个问题。然而,以管理员身份运行进程可能是一个安全问题,
发布于 2022-10-04 09:37:25
运行MMC控制台并添加本地机器证书抢注
在个人文件夹中搜索“始终加密的证书”,打开“上下文”菜单,然后单击“管理私钥”。
添加在您的DB上使用该证书的用户,并让他完全控制该密钥。

https://stackoverflow.com/questions/45366687
复制相似问题