聊聊 Sharding-JDBC 数据脱敏(一)
大家好,我是不才陈某~
这是《ShardingSphere 进阶》专栏的第2篇文章,往期文章如下:
- 聊聊 Sharding-JDBC 分库分表
安全控制一直是治理的重要环节,数据脱敏属于安全控制的范畴。对互联网公司、传统行业来说,数据安全一直是极为重视和敏感的话题。
数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。
涉及客户安全数据或者一些商业性敏感数据,如身份证号、手机号、卡号、客户号等个人信息按照相关部门规定,都需要进行数据脱敏。
关于数据脱敏陈某前面也发表过两篇文章,如下:
- 大厂也在用的 6种 数据脱敏方案,别做泄密内鬼!:介绍了常用的脱敏方案
- Springboot 日志、配置文件、接口数据如何脱敏?:介绍了SpringBoot中的日志、配置文件、接口数据的脱敏
今天来深入聊一下 Sharding-JDBC 如何对敏感数据脱敏,仅在持久层脱敏。
几个重要概念
Sharding-JDBC 在底层进行了脱敏的封装,让开发人员在无感知的情况下进行数据脱敏,来看一下官方的详情图,如下:
下面针对上图中涉及到的几个名词进行详细的解释,在下文实战中做个铺垫。
1.数据源配置
这个就是Datasource的配置,这个在上篇文章中也配置过
2.加密器配置
加密器就涉及到数据脱敏了,Sharding-JDBC 内置了两个加密器,如下:
- MD5Encryptor:MD5加密算法,一种不可逆的加密方式,通常用来对密码进行加密
- 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
文章转自公众号:码猿技术专栏