【发布时间】: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