.NET Framework Ver = 4.6.2 ,Database = 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服务应用程序的服务器。
如果我在证书安装中遗漏了某些内容,请提出建议。我们是否需要在已安装的证书中编辑某些属性?
答案 0 :(得分:1)
始终加密功能要求希望访问数据库的用户同时拥有公钥和私钥。
从消息Keyset does not exist
我假设您仅部分导入了密钥,或者只是集合的一部分。
修改强>
你有权使用这些物品吗?
%ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys
要么
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
通常当私钥丢失或访问MachineKey文件夹(注册表)时存在一些权限错误。它会出现"Keyset does not exist"
错误。
答案 1 :(得分:0)
我也遇到了这个问题,并在将帐户的用户访问级别更改为管理员时解决了。但是,以管理员身份运行流程可能是一个安全问题,