學一招,利用MySQL函數實現數據脫敏
本文轉載自微信公眾號「愛寫Bug的麥洛」,作者麥洛。轉載本文請聯系愛寫Bug的麥洛公眾號。
- 前言
- 一 什么是數據脫敏?
- 二 姓名脫敏小案例
- 2.1 定長脫敏
- 2.2 非定長脫敏
- 三 函數釋義
前言
大家好,我是麥洛,前幾天項目中用到了姓名脫敏,要保留頭和尾,中間填充不定數量的'*'。因為不熟悉相關函數,破費周折,今天總結一下,感覺有用的可以收藏一下就好
一、什么是數據脫敏?
數據脫敏(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
- +-----------------------------------------------------
【編輯推薦】




























