Oracle自定义脱敏函数的代码详解
对于信息安全有要求的,在数据下发和同步过程中需要对含有用户身份信息的敏感字段脱敏,包括用户姓名、证件号、地址等等,下面是自定义函数的代码
CREATEORREPLACEFUNCTIONF_GET_SENSITIVE(IN_STRVARCHAR,IN_TYPENUMBER) RETURNVARCHAR2IS V_STR_LENGTHNUMBER; V_NAMEVARCHAR2(1000); V_NNUMBER; V_HIDVARCHAR2(200); V_SQLVARCHAR2(200); V_NUM_FLAGNUMBER; /**** N_TYPE脱敏字段类型 1:名称 11:地址 2:证件 3:银行账号 4:联系电话 5:接入号码 ***/ BEGIN V_STR_LENGTH:=LENGTH(IN_STR); V_N:=0; IFV_STR_LENGTH=0THEN RETURN(NULL); ENDIF; /**********名称和地址脱敏规则**********/ IFIN_TYPE=1ORIN_TYPE=11THEN IFV_STR_LENGTH=2ORV_STR_LENGTH=3THEN V_NAME:=REGEXP_REPLACE(IN_STR,'(.)','*',2,1); ELSIFV_STR_LENGTH<2THEN V_NAME:=IN_STR; ELSE WHILEV_N15THEN V_NAME:=SUBSTR(IN_STR,0,4)||'********'||SUBSTR(IN_STR,-4,4); ELSE V_NAME:=IN_STR; ENDIF; RETURN(V_NAME); ENDIF; /**********联系电话脱敏规则**********/ IFIN_TYPE=4THEN V_NAME:=SUBSTR(IN_STR,0,V_STR_LENGTH-4)||'****'; RETURN(V_NAME); ENDIF; /**********接入号码脱敏规则**********/ IFIN_TYPE=5THEN V_SQL:='SELECTCOUNT(1)FROMDUALWHERELENGTH('''||IN_STR|| ''')=LENGTH(REGEXP_REPLACE('''||IN_STR||''',''[^0-9]''))'; EXECUTEIMMEDIATEV_SQL INTOV_NUM_FLAG; IFV_NUM_FLAG=1AND(V_STR_LENGTH=7ORV_STR_LENGTH=8)THEN V_NAME:=SUBSTR(IN_STR,0,2)||'****'||SUBSTR(IN_STR,-2,2); ELSIFV_NUM_FLAG=1ANDV_STR_LENGTH=11THEN V_NAME:=SUBSTR(IN_STR,0,3)||'*****'||SUBSTR(IN_STR,-3,3); ELSE V_NAME:=IN_STR; ENDIF; RETURN(V_NAME); ENDIF; RETURN(IN_STR); EXCEPTION WHENOTHERSTHEN --DBMS_OUTPUT.PUT_LINE('1'||V_SQL); V_NAME:='-1'; RETURNV_NAME; ENDF_GET_SENSITIVE;
总结
以上所述是小编给大家介绍的Oracle自定义脱敏函数的代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!