信息安全考虑,有时需要对用户名称进行数据脱敏。

针对Oracle数据库,进行取数数据脱敏处理

脱敏规则:

长度小于9个字符,只保留前3个汉字与后3个汉字,中间全部由*填充。

长度9个字及以上及奇数,隐去中间3个字;长度10个字及以上及奇数,隐去中间4个字。

例如:

公司名称:宇宙无敌厉害的超级大公司的杭州分公司

字段长度:18

脱敏后:宇宙无敌厉害的****司的杭州分公司

可实现的正确答案:

select
t.no, ---公司编号
case when length(t.name)<=8 then substr(t.name,1,3)||substr('**',1,length(t.name)-6)|| substr(t.name,-3,3) -------公司名称长度绝对大于6,一般都在6以上
else substr(t.name,1,round(length(t.name)/2,0)-2)||substr('****',1,4-mod(length(t.name),2))||substr(t.name,-(round(length(t.name)/2,0)-2),round(length(t.name)/2,0)-2) end ) -----脱敏后公司名
from aaa t;

说明:

substr(t.name,1,3)      公司名称前三个字

substr(t.name,-3,3)     公司名称后三个字

round(length(t.name)/2,0)-2   计算公司名称 * 前一部分的长度

substr('****',1,4-mod(length(t.name),2))   单数3个*  双数4个*

oracle 中使用substr函数对中文进行识别,可以一个汉字一个汉字的识别。

输入:

substr('宇宙无敌厉害的超级大公司的杭州分公司',1,3)

输出:

宇宙无

弯路:

中间尝试使用rpad(或者lpad)函数。

发现该函数对中文字段长度识别有很大的问题。

 rpad('宇宙无敌',10,'*')

理论上,字符串长度为10,“宇宙无敌”长度为4,输出结果应该为:宇宙无敌******

实际上,Oracle读取“宇宙无敌”长度为8,输出结果为:宇宙无敌**

具体情况参考:https://www.cnblogs.com/objectorl/p/rpad-length-issue-in-multibyte-encoding.html

Lpad Function:在PL/SQL中用于往源字符串的左侧填充一些字符。

函数参数:lpad( string1, padded_length, [ pad_string ] )

其中

string1:源字符串

padded_length:最终返回的字符串的长度,如果最终返回的字符串的长度比源字符串的小,那么此函数实际上对源串进行截断处理

pad_string:用于填充的字符,可以不填,默认为空字符

Oracle汉字用户名数据脱敏长度不变,rpad函数使用的更多相关文章

  1. Oracle 11g数据脱敏

    Oracle 11g数据脱敏 前言 最近开发人员有个需求,导一份生产库的数据到测试库. 由于生产数据安全需要,需要并允许对导出的数据进行加密脱敏处理. 关于加密和脱敏 个人理解, 加密是通过一系列规则 ...

  2. Oracle ebs 数据脱敏

    https://blog.csdn.net/pan_tian/article/details/16120351Data Masking可对数据进行不可逆的去身份化后,再用于非生产环境,同时自动保留引用 ...

  3. java 数据脱敏

    所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...

  4. oracle中的数据对象

    oracle中的数据对象有表.视图.索引.序列等 表的相关操作 1.创建表 方式一: 方式二:create table person( create table person1 id number(1 ...

  5. Oracle LPAD/RPAD函数在处理中文时的注意事项

    首先看下Oracle官方对函数的定义: The RPAD function returns an expression, right-padded to a specified length with ...

  6. Oracle导入excel数据方法汇总[转]

    摘要:在程序编制过程和数据汇总交换过程中,经常会碰到需要将其他人员在office办公环境下编制的文件数据内容导入oracle中的情况.目前程序开发者经常使用的方法有如下几种:1,使用oracle提供的 ...

  7. Oracle 摘去数据块的面纱

    Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00018000h 6 A2 0 0 0c 0 80 3 8b 61 15 0 0 0 3 4 type frmt spa ...

  8. 【应用】:shell crontab定时生成oracle表的数据到txt文件,并上传到ftp

    一.本人环境描述      1.oracle服务端装在win7 32位上,oracle版本为10.2.0.1.0      2.Linux为centos6.5 32位,安装在Oracle VM Vir ...

  9. Oracle 汉字在不同字符集下所占字节

    今天发现了一个问题,一个长度设置为2000字节的字段,插入一条长度为1000的汉字数据,竟然报错了. 一个汉字占两个字节,按理说刚好是2000个字节.但通过查看日志,发现插入数据的长度为3000字节. ...

随机推荐

  1. vue相关操作

    一: vue的安装 -安装node.js -vue脚手架 -vue create 项目名字 二:vue create 项目名字 用pycharm打开vue项目 -需要安装vue.js插件-settin ...

  2. Swig在Mac OS X上的安装

    网上有很多类似文章介绍Swig怎么在Mac OS X上安装和配置,一般来说就是: 下载pcre,configure & make & make install 下载swig,confi ...

  3. .NET分布式事务处理(转)

    出处:http://www.cnblogs.com/youring2/archive/2011/06/12/MSDTC.html 在进行数据持久化的时候,我们会经常用到事务处理.一般情况下,ADO.N ...

  4. Error creating bean with name 'as' defined in class path resource

    (1)一个是setter方法的名字和配置文件对应名字有问题 (2)导入的包不对,搭建环境出错.

  5. win7 iis7 ftp配置

    1.安装ftp服务器 开始菜单找到控制面板>在左侧找到打开或关闭windows功能点击 弹出如下对话框, 在弹出的对话框中找到Internet信息服务,如下 然后如上图所示,选中ftp服务器复选 ...

  6. Hadoop(HDFS、YARN、HBase、Hive和Spark等)默认端口表

    端口 作用 9000 fs.defaultFS,如:hdfs://172.25.40.171:9000 9001 dfs.namenode.rpc-address,DataNode会连接这个端口 50 ...

  7. mysql复制表以及复制数据库

    (一)将旧表复制到新表 1.CREATE TABLE新表 SELECT* FROM旧表; 该语句只是复制表结构以及数据,它不会复制与表关联的其他数据库对象,如索引,主键约束,外键约束,触发器等. CR ...

  8. Centos配置多个tomcat服务器,并用nginx实现负载均衡

    centos配置tomcat请参见上一篇博文 :http://www.cnblogs.com/nanyangzp/p/4897655.html 一:多tomcat利用不同端口开启服务器 多个tomca ...

  9. C++派生类在构造和析构过程中做的事

    (一)构造时: (1)首先调用继承关系中第一个基类(最靠左边的)的构造函数,然后第二个,第三个,以此类推 (2)然后调用成员对象的构造函数,这个顺序按照定义的顺序,与构造函数初始化列表的顺序无关. ( ...

  10. 7z文件格式及其源码的分析(五)

    这是7z文件格式及其源码的分析系列的第五篇. 上一篇讲到了7z文件压缩流程.最近太忙了,好久没更新,都快忘了写到哪了.:) 这一篇就说说7z文件的尾头的生成方式吧. 上一篇已经讲了尾header的结构 ...