我对“始终加密”概念有些困惑。请按照以下情况进行操作。
我已经在CurrentUser / My文件夹下的计算机A上创建了CMK(名称-CMK_01)。通过这种方式,我在导出的计算机A上生成了始终加密的证书。
此后,我使用此CMK(CMK_01)从机器A创建了CEK(名称-CEK_01)。
此后,我在机器B上创建了表(名称-TBL_01),并使用此CEK_01对其列(名称-COL_01)进行加密。
现在可以测试“始终加密”概念了。我已经在计算机B上安装了“始终加密”证书,并在SSMS中应用了“列加密设置=启用”。
完成此操作后,我可以在表(TBL_01)中插入带有参数化查询的数据。 我查询了这张桌子,发现数据是解密形式的(即纯文本)。
此后,我在不安装证书的情况下从计算机C查询此表,发现数据为加密形式。因此,从数据库方面来说,它基本上可以正常运行。 这取决于安装在单台计算机上的证书,并且取决于安装证书的文件夹(当前或本地计算机)。
如果为Current,则仅适用于已安装证书的用户;如果为Local,则适用于该计算机上的所有用户。
现在问题来了,
我试图在.NET方面利用此功能。 因此,我在.NET代码的连接字符串中包括了“列加密设置=启用”。 然后,我在服务器计算机(机器D)上部署了.NET代码。 之后,我始终在CurrentUser / My文件夹下的一台用户计算机(计算机E)上安装了始终加密的证书。
现在,当计算机E上的用户尝试查看UI中的数据时,它给出了错误。基本上,加密在这里不起作用。
为解决此问题,我创建了具有相同证书密钥的新CMK(名称-CMK_01),但CMK的路径位于LocalMachine \ My下。
然后,我已在现有CEK(CEK_01)中添加了这个新的CMK值。
所以现在基本上我们有2个CMK-相同的证书密钥具有不同的路径,而1个CEK具有2个不同的CMK值,这意味着两个CMK都可以访问此CEK。
此后,我们在已部署了代码(机器D)的IIS服务器上(在LocalMachine \ My路径下)安装了Always Encrypted Certificate。 清除此错误后,由于我们已在IIS服务器(计算机D)上安装了证书,因此所有可以登录该网页的用户都可以加密/解密数据。
现在我的要求是-
这是我们的实现正确吗?
这是“始终加密”的工作方式吗?我的意思是我们不能通过在用户的个人计算机上安装证书来对用户进行明智的加密和解密,以便拥有该证书访问权限的用户只能加密/解密数据,否则其余没有该证书的用户可以只在该网页上看到加密形式的数据?