8

我在我的 Web 应用程序中执行始终加密,它通过由窗口服务托管的 WCF 服务插入数据。将数据插入加密列时出现以下错误。

无法使用密钥存储提供程序解密列加密密钥:“MSSQL_CERTIFICATE_STORE”。加密列加密密钥的最后 10 个字节为:'64-56-87-3B-EC-2E-11-9D-2A-B5'。在证书位置“CurrentUser”的证书存储“My”中找不到带有指纹“A0D10777759BBD947EEA6F3F5D1A7989514C45F0”的证书。验证数据库中主密钥定义列中的证书路径是否正确,并且证书已正确导入到证书位置/存储中。参数名称:masterKeyPath

4

4 回答 4

5

这个问题的解决方案是

  1. 运行 (MMC)
  2. 在快照控制台中选择证书。
  3. 找到您始终加密的证书,我的用户或机器帐户
  4. 右键单击-> 所有任务-> 管理私钥。
  5. 添加正在建立 SQL 连接的 windows 用户。
  6. 用户可以是进程用户,可以是 IIS 或任何 Windows 登录用户。

它解决了我的问题。

于 2018-11-16T15:37:34.820 回答
4

好的,我发现了问题。情况正是如此:我使用以我自己的帐户开始的 SQL Server Management Studio 为列设置始终加密。因为我使用自己的 Windows 帐户运行 SSMS 进程,所以它将证书放在我帐户的 Current User / MY 目录中。但是 IIS 应用程序池使用不同的帐户运行,因此它无法在我的帐户的 CurrentUser/My 目录下找到证书。

我使用启动 SSMS 并创建证书的同一帐户重新启动了 IIS 应用程序池,问题就消失了。

谢谢

于 2018-01-23T13:28:43.803 回答
1

当您开始使用带有 Visual Studio 的数据库或在存储 Always Encrypted DB 的不同计算机上的 Web 服务器时,可能会发生这种情况。

您的部分消息将是:在证书位置“CurrentUser”的证书存储“My”中找不到带有指纹“............BAE90”的证书。

转到数据库所在的计算机。打开证书管理器。

右键单击“证书 - 当前用户”并查找最后几位数字(在示例 BAE90 中)。用户查看字段:SHA1 哈希。

找到证书后,右键单击它并导出到文件。

在新的 Visual Studio 机器上打开证书管理器并导入证书,您应该一切顺利。

与其他答案一样,您还需要将应用程序池中的用户“同步”到已添加证书的用户。

于 2018-04-03T18:38:29.220 回答
0

我遇到了同样的问题并尝试了很多解决方案,但实际的解决方案非常简单,解决了我的问题。

要在 ii 的服务器上安装证书,无论您的数据库服务器是在另一台服务器上还是在同一台服务器上:

1 - 转到ii服务器的证书管理器:在“运行”中键入certmgr.msc,然后按Enter

2 - 您将找到个人文件夹 --> 证书文件夹:右键单击它并导入您的证书。

3 - 从文件中选择您的证书,然后不要在个人上安装它,而是选择自动检测路径选项单选按钮并完成安装。

4 - 请记住,此安装的证书不会出现在您的个人 --> 证书文件夹下,但您的应用程序会在此之后运行,因为证书将自动安装在正确的路径上。

经过 3 天的研发后,这个解决方案对我有用。

于 2021-02-22T12:48:19.233 回答