Oracle自定义脱敏函数的代码详解
作者:九命猫幺 时间:2024-01-26 17:33:46
对于信息安全有要求的,在数据下发和同步过程中需要对含有用户身份信息的敏感字段脱敏,包括用户姓名、证件号、地址等等,下面是自定义函数的代码
CREATE OR REPLACE FUNCTION F_GET_SENSITIVE(IN_STR VARCHAR, IN_TYPE NUMBER)
RETURN VARCHAR2 IS
V_STR_LENGTH NUMBER;
V_NAME VARCHAR2(1000);
V_N NUMBER;
V_HID VARCHAR2(200);
V_SQL VARCHAR2(200);
V_NUM_FLAG NUMBER;
/****
N_TYPE 脱敏字段类型
1 :名称
11:地址
2 :证件
3 :银行账号
4 :联系电话
5 :接入号码
***/
BEGIN
V_STR_LENGTH := LENGTH(IN_STR);
V_N := 0;
IF V_STR_LENGTH=0 THEN
RETURN(NULL);
END IF;
/**********名称和地址脱敏规则**********/
IF IN_TYPE = 1 OR IN_TYPE=11 THEN
IF V_STR_LENGTH = 2 OR V_STR_LENGTH = 3 THEN
V_NAME := REGEXP_REPLACE(IN_STR, '(.)', '*', 2, 1);
ELSIF V_STR_LENGTH < 2 THEN
V_NAME :=IN_STR;
ELSE
WHILE V_N < V_STR_LENGTH / 2 LOOP
V_N := V_N + 1;
V_HID := V_HID || '*';
END LOOP;
V_NAME := SUBSTR(IN_STR, 0, V_STR_LENGTH / 2) || V_HID;
END IF;
RETURN(V_NAME);
END IF;
/**********证件脱敏规则**********/
IF IN_TYPE = 2 THEN
IF V_STR_LENGTH = 15 THEN
V_NAME := SUBSTR(IN_STR, 0, 6) || '******' || SUBSTR(IN_STR, -3, 3);
ELSIF V_STR_LENGTH = 18 THEN
V_NAME := SUBSTR(IN_STR, 0, 6) || '********' || SUBSTR(IN_STR, -4, 4);
ELSE
WHILE V_N < V_STR_LENGTH / 3 LOOP
V_N := V_N + 1;
V_HID := V_HID || '*';
END LOOP;
V_NAME := SUBSTR(IN_STR, 0, V_STR_LENGTH / 3) || V_HID ||
SUBSTR(IN_STR, -V_STR_LENGTH / 3, V_STR_LENGTH / 3);
END IF;
RETURN(V_NAME);
END IF;
/**********银行账号脱敏规则**********/
IF IN_TYPE = 3 THEN
IF V_STR_LENGTH > 15 THEN
V_NAME := SUBSTR(IN_STR, 0, 4) || '********' || SUBSTR(IN_STR, -4, 4);
ELSE
V_NAME :=IN_STR;
END IF;
RETURN(V_NAME);
END IF;
/**********联系电话脱敏规则**********/
IF IN_TYPE = 4 THEN
V_NAME := SUBSTR(IN_STR, 0, V_STR_LENGTH - 4) || '****';
RETURN(V_NAME);
END IF;
/**********接入号码脱敏规则**********/
IF IN_TYPE = 5 THEN
V_SQL := 'SELECT COUNT(1) FROM DUAL WHERE LENGTH(''' || IN_STR ||
''') = LENGTH(REGEXP_REPLACE(''' || IN_STR || ''', ''[^0-9]''))';
EXECUTE IMMEDIATE V_SQL
INTO V_NUM_FLAG;
IF V_NUM_FLAG = 1 AND (V_STR_LENGTH = 7 OR V_STR_LENGTH = 8) THEN
V_NAME := SUBSTR(IN_STR, 0, 2) || '****' || SUBSTR(IN_STR, -2, 2);
ELSIF V_NUM_FLAG = 1 AND V_STR_LENGTH = 11 THEN
V_NAME := SUBSTR(IN_STR, 0, 3) || '*****' || SUBSTR(IN_STR, -3, 3);
ELSE
V_NAME := IN_STR;
END IF;
RETURN(V_NAME);
END IF;
RETURN(IN_STR);
EXCEPTION
WHEN OTHERS THEN
-- DBMS_OUTPUT.PUT_LINE('1'||V_SQL);
V_NAME := '-1';
RETURN V_NAME;
END F_GET_SENSITIVE;
总结
以上所述是小编给大家介绍的Oracle自定义脱敏函数的代码详解,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/yongestcat/archive/2019/07/26/11250586.html
标签:oracle,脱敏,函数
0
投稿
猜你喜欢
tensorflow学习笔记之简单的神经网络训练和测试
2021-02-18 20:28:14
Python中的getopt函数使用详解
2023-04-07 03:08:00
使用Python的Scrapy框架十分钟爬取美女图
2023-06-16 03:28:57
利用SQL Server触发器实现表的历史修改痕迹记录
2024-01-19 18:06:42
PHP获取网页标题的3种实现方法代码实例
2024-05-03 15:51:06
Python使用Tkinter实现机器人走迷宫
2022-12-18 16:49:51
Python 标准库 fileinput与文件迭代器
2023-10-31 22:36:50
Python GUI布局尺寸适配方法
2022-03-07 05:52:26
Python3安装tensorflow及配置过程
2021-04-07 01:47:09
FastApi如何快速构建一个web项目的实现
2022-06-29 07:24:10
浅谈购物类网站如何保持视觉设计的一致性
2009-03-30 16:02:00
写一个简单的bat脚本执行php文件
2024-03-07 09:18:12
极力推荐10个短小实用的JavaScript代码段
2024-06-05 09:12:40
对Python subprocess.Popen子进程管道阻塞详解
2022-10-30 07:59:49
学习Python中一些实用的库
2022-11-02 13:55:56
在SQL 2005中实现循环每一行做一定的操作
2009-03-05 14:57:00
Python中用于去除空格的三个函数的使用小结
2022-02-07 23:43:45
python的Template使用指南
2023-10-14 01:30:58
Python3的socket使用方法详解
2021-11-08 13:27:48
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2024-04-18 10:03:54