解决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数据脱敏处理方案。不过,在实际中也要根据实际情况,综合综合考虑,分层处理,确保数据安全,并能够高效灵活的实现数据脱敏处理。