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

发表于:2021-10-09 09:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:麦洛    来源:爱写Bug的麦洛

  一、 什么是数据脱敏?
  数据脱敏(Data Masking),顾名思义,是屏蔽敏感数据,对某些敏感信息(比如,身份证号、手机号、卡号、客户姓名、客户地址、邮箱地址、薪资等等 )通过脱敏规则进行数据的变形,实现隐私数据的可靠保护。业界常见的脱敏规则有,替换、重排、加密、截断、掩码,用户也可以根据期望的脱敏算法自定义脱敏规则。
  二、 姓名脱敏小案例
  2.1 定长脱敏
  所谓定长脱敏,就是替换的'*'的长度固定,效果如下图所示
  SELECT 
   CONCAT( LEFT ( real_name, 1 ), '*', RIGHT ( real_name, CHAR_LENGTH( real_name )- 2 ) ) AS username  
  FROM 
   sys_user; 
  2.2 非定长脱敏
  所谓非定长脱敏,就是替换的'*'长度不定,要根据姓名实时变化;
  方式一
  SELECT 
   rpad( 
    substring(u.real_name, 1, 1), 
    char_length(u.real_name), 
    '*' 
   ) 
  FROM 
   sys_user u; 
  方式二
  SELECT 
    CONCAT( LEFT ( 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(123, 6, '0') AS str1, RPAD(123, 2, '0') AS str1; 
  |str1  |str1| 
  ----+----+ 
  |123000|12  | 
  repeat()
  返回字符串str重复count次后的字符串。如果count小于1,则返回一个空字符串。如果str或count为NULL,返回NULL。
  mysql> SELECT REPEAT('MySQL', 3); 
  +----------------------------------------------------- 
  | MySQLMySQLMySQL                                      
  +----------------------------------------------------- 

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号