0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数据脱敏的3种常见方案,好用到爆!

数据分析与开发 来源:数据分析与开发 2024-02-25 16:14 次阅读

1.SQL数据脱敏实现

MYSQL(电话号码,身份证)数据脱敏的实现

--CONCAT()、LEFT()和RIGHT()字符串函数组合使用,请看下面具体实现

-- CONCAT(str1,str2,…):返回结果为连接参数产生的字符串
-- LEFT(str,len):返回从字符串str 开始的len 最左字符
-- RIGHT(str,len):从字符串str 开始,返回最右len 字符

--电话号码脱敏sql:

SELECTmobilePhoneAS脱敏前电话号码,CONCAT(LEFT(mobilePhone,3),'********')AS脱敏后电话号码FROMt_s_user

--身份证号码脱敏sql:

SELECTidcardAS未脱敏身份证,CONCAT(LEFT(idcard,3),'****',RIGHT(idcard,4))AS脱敏后身份证号FROMt_s_user

2.JAVA数据脱敏实现

可参考:海强 / sensitive-plus

https://gitee.com/strong_sea/sensitive-plus

数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏 一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则。

3.mybatis-mate-sensitive-jackson

mybatisplus 的新作,可以测试使用,生产需要收费。

根据定义的策略类型,对数据进行脱敏,当然策略可以自定义。

#目前已有
packagemybatis.mate.strategy;

publicinterfaceSensitiveType{
StringchineseName="chineseName";
StringidCard="idCard";
Stringphone="phone";
Stringmobile="mobile";
Stringaddress="address";
Stringemail="email";
StringbankCard="bankCard";
Stringpassword="password";
StringcarNumber="carNumber";
}

Demo 代码目录

3bd0cbb2-d393-11ee-a297-92fbcf53809c.png

1、pom.xml

"1.0"encoding="UTF-8"?>
"http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

com.baomidou
mybatis-mate-examples
0.0.1-SNAPSHOT

4.0.0
mybatis-mate-sensitive-jackson


mysql
mysql-connector-java




2、appliation.yml

#DataSourceConfig
spring:
datasource:
#driver-class-name:org.h2.Driver
#schema:classpath:db/schema-h2.sql
#data:classpath:db/data-h2.sql
#url:jdbcmem:test
#username:root
#password:test
driver-class-name:com.mysql.cj.jdbc.Driver
url:jdbc//localhost:3306/mybatis_mate?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username:root
password:123456
#MybatisMate配置
mybatis-mate:
cert:
#请添加微信wx153666购买授权,不白嫖从我做起!测试证书会失效,请勿正式环境使用
grant:thisIsTestLicense
license:as/bsBaSVrsA9FfjC/N77ruEt2/QZDrW+MHETNuEuZBra5mlaXZU+DE1ZvF8UjzlLCpH3TFVH3WPV+Ya7Ugiz1Rx4wSh/FK6Ug9lhos7rnsNaRB/+mR30aXqtlLt4dAmLAOCT56r9mikW+t1DDJY8TVhERWMjEipbqGO9oe1fqYCegCEX8tVCpToKr5J1g1V86mNsNnEGXujnLlEw9jBTrGxAyQroD7Ns1Dhwz1K4Y188mvmRQp9t7OYrpgsC7N9CXq1s1c2GtvfItHArkqHE4oDrhaPjpbMjFWLI5/XqZDtW3D+AVcH7pTcYZn6vzFfDZEmfDFV5fQlT3Rc+GENEg==

#LoggerConfig
logging:
level:
mybatis.mate:debug

3、Appliation启动类

packagemybatis.mate.sensitive.jackson;

importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
publicclassSensitiveJacksonApplication{

//测试访问http://localhost:8080/info,http://localhost:8080/list
publicstaticvoidmain(String[]args){
SpringApplication.run(SensitiveJacksonApplication.class,args);
}
}

4、配置类,自定义脱敏策略

packagemybatis.mate.sensitive.jackson.config;

importmybatis.mate.databind.ISensitiveStrategy;
importmybatis.mate.strategy.SensitiveStrategy;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;

@Configuration
publicclassSensitiveStrategyConfig{

/**
*注入脱敏策略
*/
@Bean
publicISensitiveStrategysensitiveStrategy(){
//自定义testStrategy类型脱敏处理
returnnewSensitiveStrategy().addStrategy("testStrategy",t->t+"***test***");
}
}

5、业务类

User,注解标识脱敏字段,及选用脱敏策略

packagemybatis.mate.sensitive.jackson.entity;

importlombok.Getter;
importlombok.Setter;
importmybatis.mate.annotation.FieldSensitive;
importmybatis.mate.sensitive.jackson.config.SensitiveStrategyConfig;
importmybatis.mate.strategy.SensitiveType;

@Getter
@Setter
publicclassUser{
privateLongid;
/**
*这里是一个自定义的策略{@linkSensitiveStrategyConfig}初始化注入
*/
@FieldSensitive("testStrategy")
privateStringusername;
/**
*默认支持策略{@linkSensitiveType}
*/
@FieldSensitive(SensitiveType.mobile)
privateStringmobile;
@FieldSensitive(SensitiveType.email)
privateStringemail;

}

UserController

packagemybatis.mate.sensitive.jackson.controller;

importmybatis.mate.databind.ISensitiveStrategy;
importmybatis.mate.databind.RequestDataTransfer;
importmybatis.mate.sensitive.jackson.entity.User;
importmybatis.mate.sensitive.jackson.mapper.UserMapper;
importmybatis.mate.strategy.SensitiveType;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RestController;

importjavax.servlet.http.HttpServletRequest;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;

@RestController
publicclassUserController{
@Autowired
privateUserMapperuserMapper;
@Autowired
privateISensitiveStrategysensitiveStrategy;

//测试访问http://localhost:8080/info
@GetMapping("/info")
publicUserinfo(){
returnuserMapper.selectById(1L);
}

//测试返回map访问http://localhost:8080/map
@GetMapping("/map")
publicMapmap(){
//测试嵌套对象脱敏
MapuserMap=newHashMap<>();
userMap.put("user",userMapper.selectById(1L));
userMap.put("test",123);
userMap.put("userMap",newHashMap(){{
put("user2",userMapper.selectById(2L));
put("test2","hichina");
}});
//手动调用策略脱敏
userMap.put("mobile",sensitiveStrategy.getStrategyFunctionMap()
.get(SensitiveType.mobile).apply("15315388888"));
returnuserMap;
}

//测试访问http://localhost:8080/list
//不脱敏http://localhost:8080/list?skip=1
@GetMapping("/list")
publicListlist(HttpServletRequestrequest){
if("1".equals(request.getParameter("skip"))){
//跳过脱密处理
RequestDataTransfer.skipSensitive();
}
returnuserMapper.selectList(null);
}
}

UserMapper

packagemybatis.mate.sensitive.jackson.mapper;

importcom.baomidou.mybatisplus.core.mapper.BaseMapper;
importmybatis.mate.sensitive.jackson.entity.User;
importorg.apache.ibatis.annotations.Mapper;

@Mapper
publicinterfaceUserMapperextendsBaseMapper{

}

6、测试

GET http://localhost:8080/list

[
{
"id":1,
"username":"Jone***test***",
"mobile":"153******81",
"email":"t****@baomidou.com"
},
{
"id":2,
"username":"Jack***test***",
"mobile":"153******82",
"email":"t****@baomidou.com"
},
{
"id":3,
"username":"Tom***test***",
"mobile":"153******83",
"email":"t****@baomidou.com"
}
]

GET http://localhost:8080/list?skip=1

[
{
"id":1,
"username":"Jone",
"mobile":"15315388881",
"email":"test1@baomidou.com"
},
{
"id":2,
"username":"Jack",
"mobile":"15315388882",
"email":"test2@baomidou.com"
},
{
"id":3,
"username":"Tom",
"mobile":"15315388883",
"email":"test3@baomidou.com"
}
]

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87600
  • SQL
    SQL
    +关注

    关注

    1

    文章

    738

    浏览量

    43461

原文标题:数据脱敏的 3 种常见方案,好用到爆!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PCBA测试的常见方

    以看出整个工艺流程存在的问题,比如前期工序SMT、DIP等,存在问题,就进行调整,让整个工艺更加完善。PCBA测试常见方法,主要有以下几种: 1.手工测试手工测试就是直接依靠视觉进行测试,通过视觉与比较来
    发表于 11-08 17:19

    IDC设备资产运营中四“折旧率计算”的常见方

    原标题:IDC设备资产运营中四“折旧率计算”的常见方法数据中心基础设施设备管理中设备的折旧是固定资产的折旧。该基础设施设备或者IT设备在长期使用后仍可保持其原始物理形态,但由于芯片、电机、磁盘
    发表于 09-01 06:06

    常见的多方通信架构方案

    常见的多方通信架构方案Webrtc一对一的通信,通常采用的是端到端的方式,那如果多人通信的架构方案一般有这三常见
    发表于 10-29 06:12

    光耦隔离的4种常见方法对比

    光耦隔离的4种常见方法对比
    发表于 05-31 11:06 13.1w次阅读
    光耦隔离的4种<b class='flag-5'>常见方</b>法对比

    USB-C常见的PCB单转方案详解

    3C周边配件常见方案简述,可提供部分设计资料,也可以帮忙审核部分资源等。
    的头像 发表于 05-05 14:05 2043次阅读
    USB-C<b class='flag-5'>常见</b>的PCB单转<b class='flag-5'>方案</b>详解

    SQL/JAVA/mybatisplus数据脱敏实现原理

    MYSQL(电话号码,身份证)数据脱敏的实现
    的头像 发表于 06-14 17:09 3129次阅读

    数据脱敏具体指的是什么?又是如何进行数据脱敏

    一般来说,数据脱敏技术指的是在对敏感数据进行处理的过程中,通过数据变形(将数据变成模型想要的结构,如1234->1**4)的方式来降低
    发表于 11-09 09:14 1.1w次阅读

    数据脱敏技术定义及实施过程解析

    数据脱敏数据安全领域落地场景较为成熟的技术手段,在数据深层次、大范围的共享开放的今天,数据脱敏
    的头像 发表于 11-16 10:26 2109次阅读

    如何实现SpringBoot项目中的隐私数据脱敏

    数据脱敏:把系统里的一些敏感数据进行加密处理后再返回,达到保护隐私作用
    的头像 发表于 01-08 10:25 1382次阅读

    如何实现一个注解进行数据脱敏

      什么是数据脱敏 开胃菜 使用 Hutool 工具类实现数据掩码 使用 Jackson 进行数据序列化脱敏 注解实现
    的头像 发表于 06-14 09:37 670次阅读
    如何实现一个注解进行<b class='flag-5'>数据</b><b class='flag-5'>脱敏</b>

    什么是数据脱敏?常用的脱敏规则有哪些呢?

    数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。
    的头像 发表于 08-15 10:04 9930次阅读
    什么是<b class='flag-5'>数据</b><b class='flag-5'>脱敏</b>?常用的<b class='flag-5'>脱敏</b>规则有哪些呢?

    MCU批量生产下载程序的几种常见方

    MCU批量生产下载程序的几种常见方
    的头像 发表于 10-24 17:22 1005次阅读
    MCU批量生产下载程序的几种<b class='flag-5'>常见方</b>法

    SpringBoot采用JsonSerializer和Aop实现可控制的数据脱敏

    的确实现了数据脱敏,但是有个问题现在的脱敏针对的是 只要对该实体类进行了使用返回的接口,中的数据都会进行脱敏,在有些场景下是不需要的,所以说
    的头像 发表于 11-06 16:15 426次阅读
    SpringBoot采用JsonSerializer和Aop实现可控制的<b class='flag-5'>数据</b><b class='flag-5'>脱敏</b>

    盘点一下PostgreSQL的几种常用脱敏方式

    PostgreSQL Anonymizer 实现动态脱敏的方式是通过将定义某个角色为 "MASKED" 以及脱敏规则。被授予 "MASKED" 角色的用户将无法访问原始数据,而其他角色仍然可以访问。它现已支持多种的
    的头像 发表于 12-05 09:59 228次阅读
    盘点一下PostgreSQL的几种常用<b class='flag-5'>脱敏</b>方式

    车载图像如何脱敏?路畅科技给出解决方案

    路畅科技发布的一款系统给出了解决方案。 图像脱敏技术是使用人工智能、像素干扰、信息隐藏、数据加密等技术手段对图像进行处理,使其在保持可用性的同时,不再包含个人身份或其它敏感信息。图像脱敏
    的头像 发表于 03-08 11:04 202次阅读