學(xué)一招,利用MySQL函數(shù)實(shí)現(xiàn)數(shù)據(jù)脫敏
本文轉(zhuǎn)載自微信公眾號「愛寫B(tài)ug的麥洛」,作者麥洛。轉(zhuǎn)載本文請聯(lián)系愛寫B(tài)ug的麥洛公眾號。
- 前言
- 一 什么是數(shù)據(jù)脫敏?
- 二 姓名脫敏小案例
- 2.1 定長脫敏
- 2.2 非定長脫敏
- 三 函數(shù)釋義
前言
大家好,我是麥洛,前幾天項(xiàng)目中用到了姓名脫敏,要保留頭和尾,中間填充不定數(shù)量的'*'。因?yàn)椴皇煜は嚓P(guān)函數(shù),破費(fèi)周折,今天總結(jié)一下,感覺有用的可以收藏一下就好
一、什么是數(shù)據(jù)脫敏?
數(shù)據(jù)脫敏(Data Masking),顧名思義,是屏蔽敏感數(shù)據(jù),對某些敏感信息(比如,身份證號、手機(jī)號、卡號、客戶姓名、客戶地址、郵箱地址、薪資等等 )通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實(shí)現(xiàn)隱私數(shù)據(jù)的可靠保護(hù)。業(yè)界常見的脫敏規(guī)則有,替換、重排、加密、截?cái)?、掩碼,用戶也可以根據(jù)期望的脫敏算法自定義脫敏規(guī)則。
二、姓名脫敏小案例
2.1 定長脫敏
所謂定長脫敏,就是替換的'*'的長度固定,效果如下圖所示
- SELECT
- CONCAT( LEFT ( real_name, 1 ), '*', RIGHT ( real_name, CHAR_LENGTH( real_name )- 2 ) ) AS username
- FROM
- sys_user;
2.2 非定長脫敏
所謂非定長脫敏,就是替換的'*'長度不定,要根據(jù)姓名實(shí)時變化;
方式一
- 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;
三、函數(shù)釋義
在上面的例子中,我們用到了部分函數(shù),下面一起來學(xué)習(xí)一下
CONCAT()
CONCAT()函數(shù)需要一個或多個字符串參數(shù),并將它們連接成一個字符串。
- CONCAT(string1,string2, ... );
CONCAT()函數(shù)在連接之前將所有參數(shù)轉(zhuǎn)換為字符串類型。如果任何參數(shù)為NULL,則CONCAT()函數(shù)返回NULL值。
- mysql> SELECT CONCAT('MySQL','CONCAT');
- +--------------------------+
- | CONCAT('MySQL','CONCAT') |
- +--------------------------+
- | MySQLCONCAT |
- +--------------------------+
- 1 row in set
如果添加NULL值,則CONCAT函數(shù)將返回一個NULL值,如下所示:
- mysql> SELECT CONCAT('MySQL',NULL,'CONCAT');
- +-------------------------------+
- | CONCAT('MySQL',NULL,'CONCAT') |
- +-------------------------------+
- | NULL |
- +-------------------------------+
- 1 row in set
LEFT()
LEFT()函數(shù)是一個字符串函數(shù),它返回具有指定長度的字符串的左邊部分。
- LEFT(str,length);
LEFT()函數(shù)接受兩個參數(shù):
- str是要提取子字符串的字符串。
- length是一個正整數(shù),指定將從左邊返回的字符數(shù)。
LEFT()函數(shù)返回str字符串中最左邊的長度字符。如果str或length參數(shù)為NULL,則返回NULL值。
RIGHT()
該方法和left()剛好相反,用法一致,就不做贅述;
CHAR_LENGTH()
返回以字符來測量字符串str的長度。一個多字節(jié)字符算作一個字符。這意味著,對于包含五個兩字節(jié)字符的字符串,那么 length() 返回10,而 CHAR_LENGTH() 返回5。
rpad()
RPAD(str,len,padstr)函數(shù)表示在字符串 str 的右側(cè)使用 padstr 進(jìn)行填充,直到長度為 len。例如:
- SELECT RPAD(123, 6, '0') AS str1, RPAD(123, 2, '0') AS str1;
- |str1 |str1|
- ----+----+
- |123000|12 |
repeat()
返回字符串str重復(fù)count次后的字符串。如果count小于1,則返回一個空字符串。如果str或count為NULL,返回NULL。
- mysql> SELECT REPEAT('MySQL', 3);
- +-----------------------------------------------------
- | MySQLMySQLMySQL
- +-----------------------------------------------------
【編輯推薦】