暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

学一招,利用MySQL函数实现数据脱敏

爱写Bug的麦洛 2021-10-08
302

  • 前言

  • 一 什么是数据脱敏?

  • 二 姓名脱敏小案例

    • 2.1 定长脱敏

    • 2.2 非定长脱敏

  • 三 函数释义


前言

大家好,我是麦洛,前几天项目中用到了姓名脱敏,要保留头和尾,中间填充不定数量的'*'。因为不熟悉相关函数,破费周折,今天总结一下,感觉有用的可以收藏一下就好

一 什么是数据脱敏?

数据脱敏(Data Masking),顾名思义,是屏蔽敏感数据,对某些敏感信息(比如,身份证号、手机号、卡号、客户姓名、客户地址、邮箱地址、薪资等等 )通过脱敏规则进行数据的变形,实现隐私数据的可靠保护。业界常见的脱敏规则有,替换、重排、加密、截断、掩码,用户也可以根据期望的脱敏算法自定义脱敏规则。

img

二 姓名脱敏小案例

2.1 定长脱敏

所谓定长脱敏,就是替换的'*'的长度固定,效果如下图所示

SELECT
 CONCATLEFT ( real_name, 1 ), '*'RIGHT ( real_name, CHAR_LENGTH( real_name )- 2 ) ) AS username 
FROM
 sys_user;

复制

2.2 非定长脱敏

所谓非定长脱敏,就是替换的'*'长度不定,要根据姓名实时变化;

方式一

SELECT
 rpad(
  substring(u.real_name, 11),
  char_length(u.real_name),
  '*'
 )
FROM
 sys_user u;

复制

方式二

SELECT
  CONCATLEFT ( real_name, 1 ),  repeat('*',CHAR_LENGTH( real_name )- 1)) AS username 
FROM
  sys_user;

复制

三 函数释义

在上面的例子中,我们用到了部分函数,下面一起来学习一下

CONCAT()

CONCAT()
函数需要一个或多个字符串参数,并将它们连接成一个字符串。

CONCAT(string1,string2, ... );

复制

CONCAT()
函数在连接之前将所有参数转换为字符串类型。如果任何参数为NULL
,则CONCAT()
函数返回NULL
值。

mysql> SELECT CONCAT('MySQL','CONCAT');
+--------------------------+
| CONCAT('MySQL','CONCAT') |
+--------------------------+
| MySQLCONCAT              |
+--------------------------+
1 row in set


复制

如果添加NULL
值,则CONCAT
函数将返回一个NULL
值,如下所示:

mysql> SELECT CONCAT('MySQL',NULL,'CONCAT');
+-------------------------------+
| CONCAT('MySQL',NULL,'CONCAT') |
+-------------------------------+
| NULL                          |
+-------------------------------+
1 row in set


复制

LEFT()

LEFT()
函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。

LEFT(str,length);

复制

LEFT()
函数接受两个参数:

  • str
    是要提取子字符串的字符串。
  • length
    是一个正整数,指定将从左边返回的字符数。

LEFT()
函数返回str
字符串中最左边的长度字符。如果str
length
参数为NULL
,则返回NULL
值。

RIGHT()

该方法和left()刚好相反,用法一致,就不做赘述;

CHAR_LENGTH()

返回以字符来测量字符串str的长度。一个多字节字符算作一个字符。这意味着,对于包含五个两字节字符的字符串,那么 length() 返回10,而 CHAR_LENGTH() 返回5。

rpad()

RPAD(str,len,padstr)
函数表示在字符串 str 的右侧使用 padstr 进行填充,直到长度为 len。例如:

SELECT RPAD(1236'0'AS str1, RPAD(1232'0'AS str1;
|str1  |str1|
----+----+
|123000|12  |


复制

repeat()

返回字符串str重复count次后的字符串。如果count小于1,则返回一个空字符串。如果str或count为NULL,返回NULL。

mysql> SELECT REPEAT('MySQL'3);
+-----------------------------------------------------
| MySQLMySQLMySQL                                     
+-----------------------------------------------------


复制

谢谢大家阅读,我们下回见



往期推荐


基于Redis结合SpringBoot的秒杀案例详解

面试官:@Transactional 注解是如何实现的?面试必问!

5张图带你彻底理解G1垃圾收集器

MyBatis-Plus,看这一篇就够了!


下面是我的私人微信号,如果你对文章有疑问或建议,抑或是交流技术,围观朋友圈,都可以添加我的微信哦!希望可以一起学习和成长~

 



直接点击关注公众号回复 "加群",一起和大佬交流!


文章转载自爱写Bug的麦洛,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论