MySQL人员信息脱敏

tech2024-07-21  56

目录

前言一、数据样例和处理要求二、脱敏处理1.分析2.整合为过程 总结


前言

从正式环境倒库了人员数据到测试环境,需要把人员信息脱敏处理


一、数据样例和处理要求

示例:表test_user,english_name英文名,chinese_name中文名,full_name 全名{英文名(中文名)}例 peanut(花生)

SELECT english_name,chinese_name,full_name FROM test_user WHERE id=1669;

处理要求: 1、中文名修改为姓某某,不展示中文全称名 2、英文名展示

二、脱敏处理

1.分析

截取姓氏替换和补充名字 --截取姓 SELECT SUBSTRING(chinese_name, 1, 1) AS chinese_name FROM test_user WHERE id=1669; --填补名字,某某 SELECT RPAD(SUBSTRING(chinese_name, 1, 1),3,"某某") AS chinese_name FROM test_user WHERE id=1669;

2.整合为过程

代码如下(示例):

--据存脱敏储过程-gai-升级版 DELIMITER $$ DROP PROCEDURE IF EXISTS date_not_keenness $$ CREATE PROCEDURE date_not_keenness() BEGIN DECLARE v_id bigint(20);#定义ID DECLARE done INT; -- 定义游标 DECLARE rs_cursor CURSOR FOR SELECT id FROM test_user; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; OPEN rs_cursor; cursor_loop:LOOP FETCH rs_cursor INTO v_id; -- 取数据 IF done=1 THEN leave cursor_loop; END IF; -- 更新表 UPDATE test_user SET chinese_name=RPAD(SUBSTRING(chinese_name, 1, 1),3,"某某") WHERE id=v_id; END LOOP cursor_loop; CLOSE rs_cursor; END$$ DELIMITER ; --调用存储过程 CALL date_not_keenness;

--英文名和中文名合并成全名 DELIMITER $$ DROP PROCEDURE IF EXISTS coalition_name_not_keenness $$ CREATE PROCEDURE coalition_name_not_keenness() BEGIN DECLARE v_id bigint(20);#定义ID DECLARE done INT; -- 定义游标 DECLARE rs_cursor CURSOR FOR SELECT id FROM test_user; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; OPEN rs_cursor; cursor_loop:LOOP FETCH rs_cursor INTO v_id; -- 取数据 IF done=1 THEN leave cursor_loop; END IF; -- 更新表 UPDATE test_user SET full_name=CONCAT(english_name,'(',chinese_name,')') WHERE id=v_id; END LOOP cursor_loop; CLOSE rs_cursor; END$$ DELIMITER ; --调用存储过程 CALL coalition_name_not_keenness;

总结

使用的MySQL知识点:

字符截取 SUBSTRING 字符替换和补充 RPAD 练习了简单的过程
最新回复(0)