首页 > 数据库 > oracle SQL 实现对数据库的的脱敏和对称加密

oracle SQL 实现对数据库的的脱敏和对称加密

时间:2023-11-16 10:55:39浏览次数:28  
标签:SET WHERE UPDATE JIAMI SQL oracle GIM RENKOU 脱敏

之前的 kettle ETL 太慢了

  • insert into select 83w数据 220s
  • kettle 83w数据 etl 3h 26w ~

功能变更耗时

  • 另外如果需要再次对其他字段做脱敏 时间又比较耗时
  • 需要再次编写环节

复制表

INSERT INTO XXXX
SELECT * FROM XXXX_JM;

验证数据

-- 源表总数
SELECT COUNT(*)
FROM XXXX;

-- 目标表总数
SELECT COUNT(*)
FROM XXXX_JM;

加密函数 key,至少要16位

create or replace function des3_enc(input varchar2) return varchar2
is i_data varchar2(128);
v_in varchar2(255);
i_key varchar2(128);
raw_input RAW(128) ;
key_input RAW(128) ;
decrypted_raw RAW(2048);
i_data:= input;
raw_input := UTL_RAW.CAST_TO_RAW(rpad(i_data,(trunc(length(i_data)/8)+1)*8,chr(0)));
key_input := UTL_RAW.CAST_TO_RAW('abcdef0123456789');
dbms_obfuscation_toolkit.DES3Encrypt(input => raw_input,key => key_input,encrypted_data => decrypted_raw);
return to_char(rawtohex(decrypted_raw));
end des3_enc;

解密函数

create or replace function des3_dec
(
    input varchar2
)
return varchar2
is
  i_data varchar2(2048);
i_key varchar2(2048);
v_in varchar2(2048);
i_data := input;
dbms_obfuscation_toolkit.DES3DECRYPT(input_string => UTL_RAW.CAST_TO_varchar2(i_data),key_string => 'abcdef0123456789',decrypted_string=> v_in);
v_in := rtrim(v_in,chr(0));
  return v_in;
end des3_dec;

脱敏语加密

UPDATE GIM_RENKOU_JIAMI
SET SFZH = DES3_ENC ( SFZH )
WHERE
	SFZH IS NOT NULL;

脱敏掩码

UPDATE GIM_RENKOU_JIAMI 
SET XM = RPAD( SUBSTR( XM, 1, 1 ), LENGTH( XM ), '*' ),
LXFS = SUBSTR(LXFS, 1, 3) || '****' || SUBSTR(LXFS, -4),
ZY = RPAD(SUBSTR(ZY, 1, 3), LENGTH(ZY), '*');

UPDATE GIM_RENKOU_JIAMI 
SET BM = RPAD( SUBSTR( BM, 1, 1 ), LENGTH( BM ), '*' ) 
WHERE
	BM IS NOT NULL

UPDATE GIM_RENKOU_JIAMI 
SET MQXM = RPAD( SUBSTR( MQXM, 1, 1 ), LENGTH( MQXM ), '*' ) ;
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET POXM = RPAD( SUBSTR( POXM, 1, 1 ), LENGTH( POXM ), '*' ) ;
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET FQXM =  RPAD( SUBSTR( FQXM, 1, 1 ), LENGTH( FQXM ), '*' ) ;
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET GZDW = RPAD( SUBSTR( GZDW, 1, 3 ), LENGTH( GZDW ), '*' ));
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET HJDXZ = RPAD( SUBSTR( HJDXZ, 1, 3 ), LENGTH( HJDXZ ), '*' ) 
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET CSRQ =  RPAD( SUBSTR( CSRQ, 1, 3 ), LENGTH( CSRQ ), '*' ) ;
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET JG =  RPAD( SUBSTR( JG, 1, 3 ), LENGTH( JG ), '*' ) ;
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET XJJDXZ = RPAD( SUBSTR( XJJDXZ, 1, 3 ), LENGTH( XJJDXZ ), '*' ) 
WHERE  XJJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET FQSFZH =  DES3_DEC ( FQSFZH ) ;
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET MQSFZH =DES3_DEC ( MQSFZH ) ;
WHERE
	HJDXZ IS NOT NULL;

UPDATE GIM_RENKOU_JIAMI 
SET POSFZH = DES3_DEC ( POSFZH ) ;
WHERE
	HJDXZ IS NOT NULL;
``

### 题外篇
* 很多觉得 没有必要加 where~
* 理由 :
     *  函数内验证 增加代码复杂度
     *  使用 NVL函数会扫描全表
     * where 会提前过滤掉为空的数据 有效提升执行时间和性能

标签:SET,WHERE,UPDATE,JIAMI,SQL,oracle,GIM,RENKOU,脱敏
From: https://www.cnblogs.com/guanchaoguo/p/17835698.html

相关文章

  • mendix 连接默认数据库改为mss sql
    mendix支持的默认msssql数据库为2019/2022+先下载连接驱动jdbchttps://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15.当提示"The"Encrypt"propertyissetto"true"andthe"trust......
  • mysql8 更改加密方式
    先通过命令行进入mysql的root账户:更改加密方式ALTERUSER'root'@'localhost'IDENTIFIEDBY'password'PASSWORDEXPIRENEVER;更改密码ALTERUSER'root'@'localhost'IDENTIFIEDWITHmysql_native_passwordBY'password';......
  • mysql开启远程连接
    1:有账号的情况下usemysql;updateusersetHost='%'whereUser='root';flushprivileges;2:无账号的情况下,grant命令重新创建一个用户grantallprivilegeson*.*toroot@"%"identifiedby"root";flushprivileges;......
  • CentOS 8安装MySQL
    先看视频操作步骤更新系统。yum-yupdate获取Repository链接。a.前往mysqlyum下载官网b.找到对应Linux发行版本的Repository,然后单击Download。c.右键Nothanks,juststartmydownload.,复制链接。下载MySQLYumRepository。wgethttps://dev.mysql.co......
  • SQL常用知识点
    1.join多表连接查询innerjoin:只显示连接条件不为空的数据,如果on后面的连接数据为空则查询不到。selecta.name,b.namefromaaaasainnerjoinbbbasbona.id=b.idwherea.age=18andb.add='qwe'leftjoin:以表aaa为主表,会把连接之后......
  • 源码安装PostgreSQL
    准备工作更新系统。yum-yupdate安装依赖。yum-ygroupinstall"Developmenttools"yum-yinstallreadline-devel源码安装PostgreSQL创建postgres用户。groupaddpostgresuseradd-gpostgrespostgres创建安装目录并授权。mkdir-p/usr/local/postgres15.3......
  • MySql
    #查看所有数据库showdatabases;#以;结尾或者*g#创建数据库createdatabasediyi;#用来查询数据库的详细信息showcreatedatabasediyi;#查询所有的字符集及校对规则showcharset;#创建带有字符集及校对规则的数据库createdatabasediyi_1;char......
  • Python连接Oracle
    报错信息: Traceback(mostrecentcalllast):cx_Oracle.DatabaseError:DPI-1047:Cannotlocatea64-bitOracleClientlibrary:"libclntsh.so:cannotopensharedobjectfile:Nosuchfileordirectory".Seehttps://cx-oracle.readthedocs.io/en/latest/......
  • Mysql面试题
    1、MySQL有哪些数据库类型?数值类型有包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示1字节、2字节、3字节、4字节、8字节的整数类型。1)任何整数类型都可以加上UNSIGNED属性,表示无符号整数。2)任何整数类型都可以指定长度,但它不会限制数据的合法长度,仅仅限制了显示......
  • Mysql数据库查询之模糊查询
    一、什么是模糊查询模糊查询是根据一定的模式匹配规则,查找与指定条件相似或相符的数据。二、模糊查询实操通配符查询1、%表示任意0个或多个字符形式一:select查询字段from表名where字段like’%’代码演示查询结果 形式二:select查询字段from表名where字段like......