当前位置: 首页 > 科技观察

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

时间:2023-03-22 14:12:54 科技观察

本文转载自微信公众号《爱写bug的米罗》,作者米罗。转载本文请联系爱写bug的Milo公众号。前言1.什么是数据脱敏?2.名字脱敏小case2.1定长脱敏2.2非定长脱敏三个函数解释头和尾,中间用可变数量的'*'填充。由于对相关功能不熟悉,费了一番周折。我今天总结一下。如果觉得有用,可以收藏。1.什么是数据屏蔽?数据屏蔽(DataMasking),顾名思义就是屏蔽敏感数据,针对某些敏感信息(例如,身份证号、手机号、卡号、客户姓名、客户地址、邮箱、工资等)通过脱敏规则进行变形,实现对隐私数据的可靠保护。业界常见的脱敏规则包括替换、重排、加密、截断和屏蔽。用户也可以根据需要的脱敏算法自定义脱敏规则。2.name脱敏小case2.1定长脱敏所谓定长脱敏就是替换的'*'长度固定,效果如下图SELECTCONCAT(LEFT(real_name,1),'*',RIGHT(real_name,CHAR_LENGTH(real_name)-2))ASusernameFROMsys_user;2.2非定长脱敏所谓非定长脱敏是指被替换的'*'的长度是可变的,需要根据名称实时变化;方法1SELECTrpad(substring(u.real_name,1,1),char_length(u.real_name),'*')FROMsys_useru;方法二SELECTCONCAT(LEFT(real_name,1),repeat('*',CHAR_LENGTH(real_name)-1))ASusernameFROMsys_user;3.函数定义在上面的例子中,我们使用了一些函数。让我们了解CONCAT()。CONCAT()函数接受一个或多个字符串参数并将它们连接成一个字符串。CONCAT(字符串1,字符串2,...);CONCAT()函数在连接之前将所有参数转换为字符串类型。如果任何参数为NULL,则CONCAT()函数返回NULL值。mysql>SELECTCONCAT('MySQL','CONCAT');+------------------------+|CONCAT('MySQL','CONCAT')|+------------------------+|MySQLCONCAT|+-------------------------+1rowinset如果加入NULL值,CONCAT函数会返回NULL值,如下:mysql>SELECTCONCAT('MySQL',NULL,'CONCAT');+-----------------------------+|CONCAT('MySQL',NULL,'CONCAT')|+------------------------------+|NULL|+------------------------------+1rowinsetLEFT()LEFT()函数是一个字符串函数,它返回具有指定长度的字符串的左侧部分。左(海峡,长度);LEFT()函数接受两个参数:str是要从中提取子字符串的字符串。length是一个正整数,指定从左边返回的字符数。LEFT()函数返回str字符串中最左边的长度字符。如果str或length参数为NULL,则返回NULL值。RIGHT()这个方法和left()正好相反,用法也是一样的,不再赘述;CHAR_LENGTH()返回字符串str的长度(以字符为单位)。一个多字节字符算作一个字符。这意味着对于包含五个双字节字符的字符串,length()返回10而CHAR_LENGTH()返回5。rpad()RPAD(str,len,padstr)函数表示padstr用于填充右侧字符串str直到长度为len。例如:SELECTRPAD(123,6,'0')ASstr1,RPAD(123,2,'0')ASstr1;|str1|str1|----+----+|123000|12|repeat()返回字符串str被重复count次。如果计数小于1,则返回一个空字符串。如果str或count为NULL,则返回NULL。mysql>SELECTREPEAT('MySQL',3);+----------------------------------------------------|MySQLMySQLMySQL+-----------------------------------------------------【编辑推荐】iFixit拆解iPhone13Pro:内部结构变化和维护变得更加困难Redis源码Hash结构实现数据结构和算法最小跨度树,秒懂!Python实战数据结构与算法(上)标准库Collections中常用的4种数据结构