c# - 如何将 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。
解决方案
这一切都可以使用您的证书管理器来完成。
首先,在您要导出的证书的机器上,加载您的证书管理器 (certmgr)。在 Personal -> Certificates 下找到您的 Always Encrypted 证书,右键单击它,然后单击导出。这将打开一个导出向导,它应该是不言自明的。
接下来,在您希望导入证书的机器上,再次加载证书管理器,导航到个人 -> 证书,在空白处右键单击,然后单击导入。同样,这将打开一个向导,该向导应该是不言自明的。
完成这两个步骤后,它应该可以再次工作。
推荐阅读
- javascript - 如何为 MaterialUI 组件中使用的“颜色”道具使用主题颜色
- android - 单击文本视图时根据文本视图形状更改文本视图的背景颜色
- c# - LINQ:如何选择唯一行:具有多列的 max(id)?
- javascript - 如何将图表添加到 Firebase?
- php - 父类中的私有属性可以通过 PHP 中的子类的实例进行访问和重新分配,但受保护的不能
- spring - Spring Boot as API Rest 不会反序列化整个对象
- jquery-ui - 关于伪禁用元素的 jQuery UI 工具提示
- reactjs - 如果我不使用云功能,如何测试我的 react js + firestore 项目?
- javascript - 通过管理 API Auth0 React Native 补丁用户
- discord.js - 如何在 discord.js 中为用户分配任何角色?