Oracle自定义脱敏函数的代码详解

 更新时间:2019年07月26日 15:34:54   作者:九命猫幺  
这篇文章主要介绍了Oracle自定义脱敏函数的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下

对于信息安全有要求的,在数据下发和同步过程中需要对含有用户身份信息的敏感字段脱敏,包括用户姓名、证件号、地址等等,下面是自定义函数的代码

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自定义脱敏函数的代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • oracle密码过期的彻底解决方案

    oracle密码过期的彻底解决方案

    这篇文章主要为大家详细介绍了oracle密码过期的彻底解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Oracle监听器被优化大师挂掉后的完美解决方法

    Oracle监听器被优化大师挂掉后的完美解决方法

    这篇文章主要介绍了Oracle监听器被优化大师挂掉后的完美解决方法,需要的朋友可以参考下
    2017-08-08
  • 详解Oracle修改字段类型方法总结

    详解Oracle修改字段类型方法总结

    本篇文章主要介绍了Oracle修改字段类型方法总结,小编觉得不错,非常具有实用价值,有兴趣的可以了解一下。
    2016-12-12
  • Oracle自动备份脚本

    Oracle自动备份脚本

    这篇文章主要介绍了Oracle自动备份脚本的相关资料,需要的朋友可以参考下
    2016-02-02
  • zabbix监控oracle表空间的操作方法

    zabbix监控oracle表空间的操作方法

    Zabbix是一款开源的网络监控和管理系统,可以用于监控各种网络设备、服务器和应用程序等,本文给大家介绍了zabbix监控oracle表空间的操作方法,并通过代码示例和图文讲解的非常详细,需要的朋友可以参考下
    2024-04-04
  • 使用PLSQL远程连接Oracle数据库的方法(内网穿透)

    使用PLSQL远程连接Oracle数据库的方法(内网穿透)

    Oracle数据库来源于知名大厂甲骨文公司,是一款通用数据库系统,能提供完整的数据管理功能,而Oracle数据库时关系数据库的典型代表,其数据关系设计完备,这篇文章主要介绍了使用PLSQL远程连接Oracle数据库的方法(内网穿透),需要的朋友可以参考下
    2023-03-03
  • LINUX下Oracle数据导入导出的方法详解

    LINUX下Oracle数据导入导出的方法详解

    这篇文章主要介绍了LINUX下Oracle数据导入导出的方法,较为详细的分析导出工具exp及导入工具imp的具体使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • Oracle数据库统计信息方法详解

    Oracle数据库统计信息方法详解

    这篇文章主要介绍了如何查看和收集Oracle数据库中的统计信息,包括表、索引和列的统计信息,介绍了DBMS_STATS包的功能和使用方法,以及如何通过分析和删除统计信息来优化数据库性能,需要的朋友可以参考下
    2024-12-12
  • Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

    Oracle开发之分析函数(Top/Bottom N、First/Last、NTile)

    本文主要是对Oracle分析函数查找前几名、后几名、最多、最少以及按层次查询的介绍,需要的朋友可以参考下。
    2016-05-05
  • windows 7下Oracle 11g安装图文教程

    windows 7下Oracle 11g安装图文教程

    这篇文章主要为大家详细介绍了windows 7下Oracle 11g安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10

最新评论