【问题标题】:How to move MSSQL_CERTIFICATE_STORE from a machine to other machine?如何将 MSSQL_CERTIFICATE_STORE 从一台机器移动到另一台机器?
【发布时间】:2021-10-15 07:12:11
【问题描述】:

我正在使用 SQL Server“始终加密”功能。

我从本地计算机打开 SSMS,创建列主密钥 (MyCMK1),然后创建列加密密钥 (MyCEK1)。

在 SSMS 上,我使用 MyCEK1 加密 User 表中的 SSN 列。很好。

我创建了一个 .NET 控制台应用程序 + ADO.NET 来测试 SQL Server“始终加密”功能(Column Encryption Setting=Enabled; 添加到数据库连接字符串中)。

结果很好,我从 ADO.NET 结果中得到了一个未加密的SSN

接下来,我将我的控制台应用程序 (MyConsoleApp.exe) 移动到另一台机器上,然后运行该应用程序 -> 错误:

无法解密列“SSN”。无法使用密钥存储提供程序解密列加密密钥:“MSSQL_CERTIFICATE_STORE”。加密列加密密钥的最后 10 个字节为:
'3B-60-3A-40-AF-16-22-6F-ED-DE'。带指纹的证书
在证书位置“CurrentUser”的证书存储“My”中找不到“93DE41DC5F46FE6FF1436829B9362A508BB3E920”。验证数据库中主密钥定义列中的证书路径是否正确,并且证书已正确导入到证书位置/存储中。参数名称:masterKeyPath

这个错误是有道理的,因为我使用MSSQL_CERTIFICATE_STORE 存储类型并且该应用程序可以在我的本地计算机上运行,​​因为在以下位置有一个证书存储文件来存储主密钥:

CurrentUser/my/93DE41DC5F46FE6FF1436829B9362A508BB3E920

file:\\%APPDATA%\Microsoft\SystemCertificates\My\Certificates\93DE41DC5F46FE6FF1436829B9362A508BB3E920

我的问题是:如何将存储主密钥的证书存储文件从我的本地机器移动到另一台机器?

注意:我在本地机器/个人/证书 -> 空的上打开 CertMgr。

【问题讨论】:

    标签: c# sql-server ado.net always-encrypted certificate-store


    【解决方案1】:

    这一切都可以使用您的证书管理器来完成。

    首先,在您要导出证书的机器上,加载您的证书管理器 (certmgr)。在 Personal -> Certificates 下找到您的 Always Encrypted 证书,右键单击它,然后单击导出。这将打开一个导出向导,它应该是不言自明的。

    接下来,在您希望导入证书的机器上,再次加载证书管理器,导航到个人 -> 证书,在空白处右键单击,然后单击导入。同样,这将打开一个向导,该向导应该很容易解释。

    完成这两个步骤后,它应该会再次工作。

    【讨论】:

    • 请看我的笔记。谢谢!
    【解决方案2】:

    转到您的证书管理器。使用 KeyIdentifier "93DE41DC5F46FE6FF1436829B9362A508BB3E920" 中的密钥搜索证书来查找您的证书。然后,您可以导出证书并将此导出的证书导入您的客户端计算机。

    如果您双击证书,在详细信息中,您会看到这个 KeyIdentifier 是指纹。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多