首页数据库Oracle自定义脱敏函数的代码详解

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

时间2024-02-28 14:37:04发布访客分类数据库浏览176
导读:收集整理的这篇文章主要介绍了Oracle自定义脱敏函数的代码详解,觉得挺不错的,现在分享给大家,也给大家做个参考。 对于信息安全有要求的,在数据下发和同步过程中需要对含有用户身份信息的敏...
收集整理的这篇文章主要介绍了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用decode函数或CASE-WHEN实现自定义排序
  • 使用Python脚本zabbix自定义key监控oracle连接状态
  • Oracle 自定义split 函数实例详解
  • ORACLE实现自定义序列号生成的方法
  • 详解Oracle自定义异常示例
  • Oracle将查询的结果放入一张自定义表中并再查询数据
  • oracle异常(预定义异常,自定义异常)应用介绍
  • Oracle用户自定义异常实现过程解析

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Oracle自定义脱敏函数的代码详解
本文地址: https://pptw.com/jishu/631554.html
Oracle数据库不同损坏级别的恢复教程 Oracle使用MyBatis中RowBounds实现分页查询功能

游客 回复需填写必要信息