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

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

本文转载自微信公众号「爱写Bug的麦洛」,作者麦洛。转载本文请联系爱写Bug的麦洛公众号。

  • 前言
  • 一 什么是数据脱敏?
  • 二 姓名脱敏小案例
    • 2.1 定长脱敏
    • 2.2 非定长脱敏
  • 三 函数释义

前言

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

一、什么是数据脱敏?

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

二、姓名脱敏小案例

2.1 定长脱敏

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

  1. SELECT 
  2.  CONCAT( LEFT ( real_name, 1 ), '*'RIGHT ( real_name, CHAR_LENGTH( real_name )- 2 ) ) AS username  
  3. FROM 
  4.  sys_user; 

2.2 非定长脱敏

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

方式一

  1. SELECT 
  2.  rpad( 
  3.   substring(u.real_name, 1, 1), 
  4.   char_length(u.real_name), 
  5.   '*' 
  6.  ) 
  7. FROM 
  8.  sys_user u; 

方式二

  1. SELECT 
  2.   CONCAT( LEFT ( real_name, 1 ),  repeat('*',CHAR_LENGTH( real_name )- 1)) AS username  
  3. FROM 
  4.   sys_user; 

三、函数释义

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

CONCAT()

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

  1. CONCAT(string1,string2, ... ); 

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

  1. mysql> SELECT CONCAT('MySQL','CONCAT'); 
  2. +--------------------------+ 
  3. | CONCAT('MySQL','CONCAT') | 
  4. +--------------------------+ 
  5. | MySQLCONCAT              | 
  6. +--------------------------+ 
  7. 1 row in set 

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

  1. mysql> SELECT CONCAT('MySQL',NULL,'CONCAT'); 
  2. +-------------------------------+ 
  3. | CONCAT('MySQL',NULL,'CONCAT') | 
  4. +-------------------------------+ 
  5. NULL                          | 
  6. +-------------------------------+ 
  7. 1 row in set 

LEFT()

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

  1. 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。例如:

  1. SELECT RPAD(123, 6, '0'AS str1, RPAD(123, 2, '0'AS str1; 
  2. |str1  |str1| 
  3. ----+----+ 
  4. |123000|12  | 

repeat()

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

  1. mysql> SELECT REPEAT('MySQL', 3); 
  2. +----------------------------------------------------- 
  3. | MySQLMySQLMySQL                                      
  4. +----------------------------------------------------- 

 【编辑推荐】

 

责任编辑:武晓燕 来源: 爱写Bug的麦洛
相关推荐

2022-06-24 10:26:07

pandasExcelPython

2011-04-19 09:47:14

2013-07-30 11:24:33

SAP“简化IT 一招

2020-06-22 14:18:02

运维架构技术

2021-11-22 11:30:37

JavaScript代码浏览器

2022-12-26 09:16:56

请求量代码QPS

2020-10-20 08:01:30

MySQL密码Windows

2021-08-21 23:33:16

iOS苹果系统

2021-06-28 20:01:07

电脑性能Windows 7

2013-05-03 11:21:27

2022-09-06 11:53:00

开发计算

2022-05-30 08:53:47

PycharmPython

2012-02-01 15:41:42

2023-03-03 13:14:46

2011-05-03 11:13:51

黑盒

2020-09-16 06:08:10

Linux文本比对代码

2010-03-16 08:59:45

Windows 7纯净版安装

2009-02-20 10:09:00

网吧掉线路由器

2018-11-30 16:17:28

HTTPS

2021-08-03 15:25:09

数据库Sharding SpSQL
点赞
收藏

51CTO技术栈公众号