如何在SSMS中查看Always Encrypted 加密列的解密数据

通常情况下,我们在SSMS客户端看到Always Encrypted 加密列的数据都是密文的。那么是否可以查看解密后的数据呢?如何配置才能实现呢?本文将阐述该过程的实现。

如何在SSMS中查看Always Encrypted 加密列的解密数据_第1张图片

要在SSMS客户端查看Always Encrypted加密列解密后的数据,需要三个前提:

  1. 对应数据库需要合适的权限

  2. 客户端所在计算机安装Always Encrypted 证书

  3. 设置连接属性

权限设置

要查看数据,对象SELECT权限是必要的,其次要有查看列主秘钥和列加密秘钥的权限

--创建登陆账户
CREATE LOGIN Jack WITH PASSWORD='!

客户端证书配置

使用Always Encrypted 加密数据后,在数据库服务中创建一个证书。你需要导出这个证书,并将其导入到需要访问处理加密数据的客服端所在的机器。

 

服务端证书导出

为了查看在数据库服务上创建的证书列表,你可以在CMD命令行中执行certmgr命令:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第2张图片

在证书-当前用户→个人→证书下,我们可以看到Always Encrypted在数据库服务中创建的证书,如下:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第3张图片

你也可以通过搜索Always Encrypted来定位证书。

要导出证书,可以通过右击对应的证书,所有任务→导出:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第4张图片

跳出证书导出向导:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第5张图片

点击下一步,你将到达屏幕中导出的最重要的一步:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第6张图片

你必须选择“是,导出私钥(Y)”。如果你不选择这个选项,那么导出的证书将没有作用。我们选择了那个选项,点击下一步,我们可以看到更多的选项:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第7张图片

我选择了“如果可能,则包括证书路径中的所有证书(U)”和“导出所有扩展属性”两个选项。此时我不删除私钥。根据你的需求,你可能想要在稍后移除私钥,但是我提倡在导入证书并验证可以正常工作前移除私钥。否则你将遇到加密数据的困难,并且需要从备份中恢复备份,重新开始加密进程。

我们将点击下一步,设置保护私钥的密码:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第8张图片

我们填入强密码,然后点击下一步:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第9张图片

我们选择一个路径,及文件名,然后点击下一步:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第10张图片

查看详细信息,并点击完成,你将看到这个:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第11张图片

现在我们已经导出了证书,接下来,让我们将证书导入客户端机器,并验证我们可以查看解密数据。同样我从打开certmgr开始。

 

客户端证书导入

导航到证书文件夹,个人,并右击开始导入证书:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第12张图片

我们将进入证书导入向导,并且可以看到“当前用户“已经被选定:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第13张图片

点击下一步,导航到导出证书文件的存储路径:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第14张图片

点击下一步,输入导出证书时加密私钥的强密码:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第15张图片

我选择“包括所有扩展属性(A)”。注意,我不允许这个秘钥可以被导出。稍后将给予更多说明。

现在点击下一步:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第16张图片

证书存储的位置“个人”已经选定,这是我用于这个例子中需要的选项,因此直接点击下一步:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第17张图片

查看详细信息,并点击完成,你将看到:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第18张图片

下一步,我想要验证导入的证书是否有效。

设置连接属性并验证证书

前面我提到,查看Always Encrypted 解密数据,需要三个前提,权限已经赋予,证书已经导入。接下来我们来设置连接字符串。我们可以在SSMS中进行设置,在连接的高级选项中,我们加入“Column Encryption Setting = enabled”,如下:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第19张图片

此时我们在客户端执行查询,可以看到解密后的数据:

如何在SSMS中查看Always Encrypted 加密列的解密数据_第20张图片

总结:

导出证书直接提供了包含的各个步骤。有两个事情需要注意。首先,例子中导入的秘钥是不能导出的(还记得我之前说过稍后给予解释吗?现在就是时候)。这意味着不能够将这个秘钥四处传播。这是一个很好的事情。第二,如果你从数据库服务移除了证书,你需要在其他地方保存证书的额外备份。否则,你有可能有丢失秘钥的风险,面临着从加密设置开始之前的备份文件中恢复数据。需要记在心里的是,当你检查您的安全设置时,我推荐你导出秘钥,并将其放置在一个安全的位置,为未来的导入导出活动所使用,并从数据库服务器中删除证书作为额外的安全措施。

你可能感兴趣的:(SQL,Server,安全管理,SQL,Server,可用性,SQL,Server,数据库,数据安全,AlwaysEncrypted,总是加密,秘钥)