解决Oracle数据脱敏之道(oracle数据脱敏)

在数据库开发的过程中,为确保安全性,往往需要对数据进行隐私/敏感数据掩码脱敏处理,以确保数据安全,特别是Oracle数据库。遗憾的是,Oracle的基础软件完全没有提供数据脱敏的功能,所以,如何通过Oracle数据库来实现数据脱敏?今天给大家来个实操,让我们一起来学习解决Oracle数据脱敏之道!

建议Oracle数据库脱敏方案有三个过程:一是数据层;二是存储层;三是应用层。

首先来介绍一下数据层,其主要是指数据展示层,也就是将要处理的数据展示出来后,在界面地通过规范的掩码脱敏格式,将要脱敏的数据进行一定规则的混淆,以确保数据安全。下面是一段典型的掩码脱敏代码:

DECLARE

–姓名

vName VARCHAR2(100);

–身份证号码

vId VARCHAR2(20);

BEGIN

–姓名无脱敏要求

SELECT Name INTO vName FROM EMPLOYEE WHERE Id = 123;

–身份证号码进行脱敏

SELECT MaskId(Id) INTO vId FROM EMPLOYEE WHERE Id = 123;

END;

第二个是存储层脱敏,其主要定位于数据库存储层,即对数据库地表结构字段设计数据脱敏处理,如触发器或存储过程,在保存数据前进行增强处理,可以将数据值进行安全的数据脱敏处理,在查询操作时运用类似的规则进行复原处理得到表数据。以下是一段存储过程实现数据脱敏的Example:

CREATE OR REPLACE PROCEDURE MASK_SENSITIVE_DATA_COLUMN

–身份证号码

(in_id IN VARCHAR2)

–输出掩码后字符串

(out_masked OUT VARCHAR2)

IS

BEGIN

–定义变量,保存身份证号前几位

v_front VARCHAR2;

–定义变量,保存身份证号最后几位

v_back VARCHAR2;

BEGIN

SELECT SUBSTR(in_id, 0, 5), SUBSTR(in_id, LENGTH(in_id) – 3, LENGTH(in_id))

INTO v_front, v_back

FROM DUAL;

–将身份证号中间字符掩码

out_masked := v_front || LPAD(‘X’, LENGTH(in_id) – 8, ‘X’) || v_back;

END;

/

最后一个就是APP层的脱敏处理,这个脱敏一般在应用程序层实现,当然例外情况可以采用数据库存储过程来完成,不过在很多上层应用开发语言中都有普遍采用的脱敏函数,例如,Oracle PL/SQL中有maskchars函数,用来实现替换字符,下面是一个简单的例子:

declare

–身份证

v_id varchar2(20):=’123456789012345678′;

begin

–身份证号:—> 1XXXXXX345678

dbms_output.put_line(MASKCHARS(v_id,9,5,’X’));

end;

上面介绍的三类脱敏方案,分别是数据层的界面脱敏,存储层的数据库脱敏以及应用层的脱敏算法,加起来就是我们使用常用的Oracle数据脱敏处理方案。不过,在实际中也要根据实际情况,综合综合考虑,分层处理,确保数据安全,并能够高效灵活的实现数据脱敏处理。


数据运维技术 » 解决Oracle数据脱敏之道(oracle数据脱敏)