首页 > 解决方案 > 如何将 MSSQL_CERTIFICATE_STORE 从一台机器移动到另一台机器?

问题描述

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

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

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

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

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

接下来,我将我的控制台应用程序 ( 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-serverado.netalways-encryptedcertificate-store

解决方案


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

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

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

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


推荐阅读