2

我对始终加密的概念有些困惑。请按照以下方案。

我在 CurrentUser/My 文件夹下的机器 A 上创建了 CMK(名称 - CMK_01)。通过这种方式,我在已导出的机器 A 上生成了始终加密的证书。

在此之后,我使用此 CMK (CMK_01) 从机器 A 创建了 CEK(名称 - CEK_01)。

在此之后,我在机器 B 上创建了表(名称 - TBL_01)并使用这个 CEK_01 来加密它的列(名称 - COL_01)。

现在测试 Always Encrypted 概念,我在机器 B 上安装了 Always Encrypted 证书,并在 SSMS 中应用了 Column Encryption Setting = Enabled。

完成此操作后,我可以在此表 (TBL_01) 中插入带有参数化查询的数据。我查询了这张表,发现数据是解密的形式(即纯文本)。

在此之后,我在没有安装证书的情况下从机器 C 查询这张表,我发现数据是加密形式的。所以基本上它从数据库端完美地工作。这基于安装在单个计算机上的证书并取决于它安装的文件夹(当前或本地计算机)。

如果 Current 则仅适用于安装了证书的用户,如果 Local 则适用于该计算机上的所有用户。

现在问题来了,

我试图将此功能利用到 .NET 端。所以我在 .NET 代码的连接字符串中包含了 Column Encryption Setting = Enabled。然后我在服务器机器(机器 D)上部署了 .NET 代码。在此之后,我在 CurrentUser/My 文件夹下的一台用户机器(机器 E)上安装了始终加密的证书。

现在,当机器 E 上的用户试图在 UI 中查看数据时,它给出了一个错误。基本上加密在这里不起作用。

为了解决这个问题,我创建了具有相同证书密钥的新 CMK(名称 – CMK_01),但 CMK 的路径位于 LocalMachine\My 下。

然后我在现有的 CEK (CEK_01) 中添加了这个新的 CMK 值。

所以现在基本上我们有 2 个 CMK - 具有不同路径的相同证书密钥和 1 个具有 2 个不同 CMK 值的 CEK,这意味着两个 CMK 都可以访问这个 CEK。

在此之后,我们在部署了我们的代码(机器 D)的 IIS 服务器(在 LocalMachine\My 路径下)上安装了 Always Encrypted 证书。删除此错误后,所有可以登录该网页的用户都可以加密/解密数据,因为我们已经在 IIS 服务器(机器 D)上安装了证书。

现在我的问题是——

  1. 这是我们的实现正确吗?

  2. 这就是 Always Encrypted 的工作原理吗?我的意思是我们不能通过在用户的个人计算机上安装证书来进行个人用户明智的加密和解密,因此谁拥有该证书访问权限,该用户只能加密/解密数据,否则其余没有该证书的用户这些用户可以只在该网页上看到加密形式的数据?

4

0 回答 0