ShardingSphere-ShardingJdbc 数据脱敏

摘要:

数据脱敏(Data Masking),又称数据漂白、数据去隐私化或数据变形。百度百科给出的解释:数据脱敏指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。数据安全技术之一,数据库安全技术主要包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。数据库安全风险包括:拖库、刷库、撞库。
开发系统过程中,对一些涉及用户的个人敏感信息,如密码、身份证号、家庭住址等信息,在进行存储数据库之前进行加密。使得即使存入数据库之后,数据库的管理员看到的数据也是加密的,可以在很大程度上提高数据的安全性。ShardingJdbc提供了内置的加密方式,MD5、AES,同时也支持自定义加密方式。

数据脱敏从技术上可以分为静态数据脱敏和动态数据脱敏两种:

  1. 静态数据脱敏一般应用于数据外发场景,例如需要将生产数据导出发送给开发人员、测试人员、分析人员等;
  2. 动态数据脱敏一般应用于直接连接生产数据的场景,例如运维人员在运维的工作中直接连接生产数据库进行运维,客服人员通过应用直接调取生产中的个人信息等。

数据脱敏的实现方式

  1. 使用脚本进行脱敏
  2. 使用专业的数据脱敏产品进行脱敏

脱敏实现

一、环境准备

程序环境:SpringBoot+MyBatis-plus
数据库环境:

数据库数据库名称数据表
5.7.31-logshardingsphereuser

表结构: user表结构

二、添加相关依赖

<!--shardingsphere数据分片、脱敏工具-->
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.0</version>
</dependency>

三、配置脱敏规则

#### spring  ####
spring:
  # 配置说明地址 http://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-proxy/configuration/
  shardingsphere:
    # 数据库
    datasource:
#      # 数据库的别名
      names: ds0
#      # 主库1
      ds0:
        ###  数据源类别
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/shardingsphere?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
        username: root
        password: 123456
        ### 初始化大小,最小,最大
        initialSize: 5
        minIdle: 5
        maxActive: 20
        ### 配置获取连接等待超时的时间,单位是毫秒
        maxWait: 60000
        ### 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        ### 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        ### 打开PSCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        ### 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,log4j
        ### 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    sharding:
      # 数据脱敏规则配置---start
      encrypt-rule:
        encryptors:
          encryptor_MD5:
            type: MD5
            props:
              md5.key.value: 123456
          encryptor_aes:
            # 加密、解密器的名字,内置的为MD5,aes.
            # 可以自定义,实现
            # org.apache.shardingsphere.encrypt.strategy.spi.Encryptor
            # 或者
            # org.apache.shardingsphere.encrypt.strategy.spi.QueryAssistedEncryptor
            # 这两个接口即可
            type: aes
            props:
              aes.key.value: 123456
        tables:
          # tables
          user:
            columns:
              # 逻辑列,就是写SQL里面的列,因为实体类的名字和数据库的加密列一致,所以这里都是name
              password:
                # 原文列
                plainColumn: password
                # 密文列,用来存储密文数据
                cipherColumn: md5_password
                # 加密器名字
                encryptor: encryptor_MD5
              password1:
                # 原文列
                plainColumn: password1
                # 密文列,用来存储密文数据
                cipherColumn: aes_password
                # 加密器名字
                encryptor: encryptor_aes
      # 数据脱敏规则配置---end
    props:
      # 打印SQL
      sql.show: true
      check:
        table:
          metadata: true
          # 是否在启动时检查分表元数据一致性
          enabled: true
      query:
        with:
          cipher:
            column: true

数据脱敏规说明:

  • 配置了两种规则的加密器,分别是encryptor_MD5(使用md5加密),encryptor_aes(使用aes加密)。
  • 需要脱敏的内容为user表中的password(逻辑列为password,使用md5加密,存储原文到password列,存储密文到md5_password列)、password1(逻辑列为password1,使用aes加密,存储原文到password1列,存储密文到aes_password列)。

四、实现脱敏

4.1 插入数据

存储接口调用数据:
存储接口访问
数据持久化过程:
数据持久化过程
数据库存储的内容:
user数据库存储的内容
总结:
数据插入过程已经将password和password1分别按照md5和aes方法加密并存入对应得加密字段位置(实际过程中可以去掉原文列,只存储加密后的内容)

4.2 获取数据

数据获取过程:
user数据库存储的内容
接口获取到的数据:
接口获取到的数据
总结:
数据获取过程将md5_password映射到password,将 aes_password 映射到 password1。从获取到的数据可以看出,已经将aes_password 内容解密到password1;但是由于md5是不可逆的过程,所以直接将md5_password映射到password中。

ShardingSphere-ShardingJdbc 数据脱敏官方文档:
https://shardingsphere.apache.org/document/legacy/4.x/document/cn/features/orchestration/encrypt/
源码传送门:https://github.com/oycyqr/springboot-learning-demo/tree/master/springboot-shardingsphere

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值