在上一篇文章中,将数据加密的两种情况分为shardingsphere,以实现数据加密(脱敏)
他们是:
我们对这项业务进行了模拟实验。
创建语句和配置文件
为了模拟已经启动的业务,我们在表中创建一些测试数据并编写业务界面以实现凝乳
但是,需要在数据库表T_user中添加一个新字段,称为pwd_cipher,即Ciphercolumn,用于存储Ciphertext数据。同时,我们将Plalcolumn设置为PWD以存储明亮的文本数据,并将LogicColumn设置为PWD。
因为以前的代码SQL是用PWD编写的,也就是说,SQL为逻辑列编写,因此不需要更改业务代码。通过Apache shardingsphere,新添加的数据将写入PWD列以获取新数据,并将清晰的文本将被加密到PWD_CIPHER列。这次,因为QueryWithCipherColumn设置为False,对于业务应用程序,PWD仍用于查询存储,但它存储在基础数据库表PWD_Cipher中。
配置文件如下(本文只需要注意节点部分):
此时,调用了业务界面,新插入的数据将同时存储在Mingwen PWD和加密列PWD_CIPHER中。
上面的整个处理过程如下图所示:
在这一点上,输入未来时间的数据已加密。
自己加密旧数据
具体而言,在此示例中,您需要手动对PWD字段未加密的所有值进行手动加密并将Ciphertext存储到PWD_CIPHER中。
可见,是要组成空位。
首先,我们参考shardingsphere的AES Plus密码算法来转换工具类:
然后,为了简要介绍,我的想法是使用Java程序直接检测数据并直接进行更新。查询很简单。如果您更新
以下是一个更新方法。请注意,此处的Aeskey与上面的配置文件一致。
执行程序后,加密的列PWD_CIPHER具有数据。
由于在配置项目中的QueryWithCipherColumn = false,因此从未使用过Ciphertext。如果我们制作系统来检查密文数据,则需要将QueryWithCipherColumn设置为“加密配置”。
尽管现在由密文列出的数据删除了业务系统,并在解密后将其返回;但是,在存储时,它仍然会将原始数据存储到mingwen列中。为什么?答案是:能够回滚系统。由于只要始终同时存在Ciphertext和Mingwen,我们就可以将业务查询转换为Ciphercolumn或Plalcolumn,通过Switch Item configuration。如果将系统切成查询的密文列,则发现系统报告错误并需要回滚。同样,处理过程如下图所示:
通常不可能使数据库的明确文本和密码文本永久同步。系统稳定后,我们需要删除显式数据。
但是,由于存在LogicColumn的存在,因此“删除列”不需要动员为业务代码,并且用户的写作SQL正面向此虚拟列。Apache shardingsphere可以在映射的基础数据表中映射此逻辑列和密文列表。因此,迁移后的加密配置为:
直接在数据库中删除列
您可以看到没有列表,只剩下太多列表。从数据库中,我们无法再查看密码是什么。然后我们调用查询界面并查看数据:
可以看出,数据是解密后的样子。
处理过程如下: