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

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

 

大家好,我是不才陈某~

 

这是《ShardingSphere 进阶》专栏的第2篇文章,往期文章如下:

  • 聊聊 Sharding-JDBC 分库分表


安全控制一直是治理的重要环节,数据脱敏属于安全控制的范畴。对互联网公司、传统行业来说,数据安全一直是极为重视和敏感的话题。

 

数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。

 

涉及客户安全数据或者一些商业性敏感数据,如身份证号、手机号、卡号、客户号等个人信息按照相关部门规定,都需要进行数据脱敏。

 

关于数据脱敏陈某前面也发表过两篇文章,如下:

  • 大厂也在用的 6种 数据脱敏方案,别做泄密内鬼!:介绍了常用的脱敏方案
  • Springboot 日志、配置文件、接口数据如何脱敏?:介绍了SpringBoot中的日志、配置文件、接口数据的脱敏

 

今天来深入聊一下 Sharding-JDBC 如何对敏感数据脱敏,仅在持久层脱敏。

 

几个重要概念
Sharding-JDBC 在底层进行了脱敏的封装,让开发人员在无感知的情况下进行数据脱敏,来看一下官方的详情图,如下:

 聊聊 Sharding-JDBC 数据脱敏(一)-开源基础软件社区
下面针对上图中涉及到的几个名词进行详细的解释,在下文实战中做个铺垫。

 

1.数据源配置

这个就是Datasource的配置,这个在上篇文章中也配置过

 

2.加密器配置

加密器就涉及到数据脱敏了,Sharding-JDBC 内置了两个加密器,如下:

  1. MD5Encryptor:MD5加密算法,一种不可逆的加密方式,通常用来对密码进行加密
  2. AESEncryptor:AES加密算法,一种可逆的加密方式,通常用来对回显的字段加密,比如身份证、手机号码
    Sharding-JDBC还支持自定义加密器,这个会在下文介绍。

 

3.脱敏表配置

用于告诉 Sharding-JDBC 数据表里哪个列用于存储密文数据(cipherColumn)、哪个列用于存储明文数据(plainColumn)以及用户想使用哪个列进行SQL编写(logicColumn):

  • logicColumn:逻辑列,这个和前文中逻辑表类似,用于实际的SQL编写,比如数据库中真实字段是cipher_pwd,但是在Sharding-JDBC配置时指定逻辑列的名称为:pwd,那么在写SQL的时候就要使用逻辑列pwd进行查询。
  • cipherColumn:存储密文数据的字段
  • plainColumn:存储明文数据的字段,一般不使用,不然脱敏也毫无意义

 

4.查询属性的配置

当底层数据库表里同时存储了明文数据、密文数据后,该属性开关用于决定是直接查询数据库表里的明文数据进行返回,还是查询密文数据通过Encrypt-JDBC解密后返回。

 

数据脱敏实战
基本概念介绍完了,下面就使用Sharding-JDBC进行数据脱敏。

这里就不再演示分库分表了,直接用单库进行脱敏演示。

“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9534  获取!”
1. 新建表
笔者这里新建了一张用户表t_user,如下:

CREATE TABLE `t_user` (
  `user_id` bigint(20) NOT NULL COMMENT '用户唯一ID',
  `fullname` varchar(50) DEFAULT NULL COMMENT '名字',
  `user_type` varchar(255) DEFAULT NULL COMMENT '类型',
  `cipher_pwd` varchar(255) DEFAULT NULL COMMENT '密码',
  `mobile` varchar(100) DEFAULT NULL COMMENT '手机号',
  `mobile_data` varchar(100) DEFAULT NULL COMMENT '手机号',
  `id_card` varchar(60) DEFAULT NULL COMMENT '身份证',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

2. 数据源配置
数据源这里使用单数据源,配置很简单,上篇文章也演示过,配置如下:

spring:
  # Sharding-JDBC的配置
  shardingsphere:
    datasource:
      names: ds
     # 数据源ds配置
      ds:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/user_db?useUnicode=true&characterEncoding=utf-8
        username: root
        password: 123456

 

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

标签
已于2022-7-8 17:27:44修改
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐