聊聊 Sharding-JDBC 数据脱敏(三)

love374
发布于 2022-7-8 17:27
浏览
0收藏

 

数据如下:

 聊聊 Sharding-JDBC 数据脱敏(三)-鸿蒙开发者社区
可以看到数据持久化到数据库中已经脱敏了。

 

问题来了:那么查询的效果出来的效果是什么?

 

试想一下,MD5加密器是不可逆的,AES加密器是可逆的,那么符合正常逻辑的状态下就应该是密码这个字段查询出来的还是密文(不可逆),身份证、手机号查询出来的应该是明文。

 

新建查询的单元测试,如下:

@Test
public void testList() throws JsonProcessingException {
    List<User> users = userMapper.listAll();
    ObjectMapper objectMapper = new ObjectMapper();
    String json = objectMapper.writeValueAsString(users);
    System.out.println(json);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

 

结果如下:

 聊聊 Sharding-JDBC 数据脱敏(三)-鸿蒙开发者社区
很清楚了,一切都朝着我们的预料的方向发展~

“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9534  获取!”

 

限制条件
字段进行脱敏后在写SQL时有一些操作是不支持的,如下:

  1. 脱敏字段无法支持比较操作,如:大于小于、ORDER BY、BETWEEN、LIKE等。
  2. 脱敏字段无法支持计算操作,如:AVG、SUM以及计算表达式 。


原理
其实Sharding-JDBC数据脱敏原理很简单,看一下官方给的一张图:

聊聊 Sharding-JDBC 数据脱敏(三)-鸿蒙开发者社区

1.  插入数据
加密器有一个公共的接口Encryptor,如下:

public interface Encryptor extends TypeBasedSPI {
    
    /**
     * Initialize.
     */
    void init();
    
    /**
     * Encode.
     * 
     * @param plaintext plaintext
     * @return ciphertext
     */
    String encrypt(Object plaintext);
    
    /**
     * Decode.
     * 
     * @param ciphertext ciphertext
     * @return plaintext
     */
    Object decrypt(String ciphertext);
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

 

当插入数据涉及到加密字段,即是定义的逻辑列,那么Sharding-JDBC内部会将这条SQL改写,将逻辑列替换成表的真实列,并且调用 encrypt(Object plaintext)方法将明文加密成密文后存储进去。

“具体的源码就不贴出来了,后面源码章节介绍”

 

文章转自公众号:码猿技术专栏

标签
已于2022-7-8 17:27:32修改
收藏
回复
举报


回复
    相关推荐