在曾经的项目中,进行Oracle的迁移适配测试的时候,曾经收到过一种需求,需要把生产环境数据导入导出到测试环境中,然而由于数据安全性问题需要对某表进行脱敏。在Oracle的expdp工具中,可以使用remap_data达到此种效果,然而在DM dexp工具中,并未搜索到类似的功能或参数。然而,在DM仍旧可以使用其他方式达到实现dexp脱敏的效果。
关于DBMS_RLS,可以查看官方内部手册,那里有较为详细的描述,这里根据DBMS_RLS包指南,创建测试数据。
conn sysdba/SYSDBA
SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_RLS');
create user TEST1 identified by 123456789;
grant dba to test1;
conn TEST1/123456789
create table TEST(id int,name varchar(20));
insert into TEST values(1,'AAA');
insert into TEST values(2,'BBB');
insert into TEST values(3,'CCC');--敏感用户数据
COMMIT;
CREATE OR REPLACE FUNCTION FN_GETPOLICY(
P_SCHEMA IN VARCHAR2,
P_OBJECT IN VARCHAR2
)
RETURN VARCHAR2 IS RESULT VARCHAR2(1000);
BEGIN
RESULT:='id !=3';
RETURN(RESULT);
END;
/
DBMS_RLS.ADD_POLICY(
OBJECT_SCHEMA =>'TEST1', //数据表(或视图)所在的SCHEMA名称
OBJECT_NAME =>'TEST', //数据表(或视图)的名称
POLICY_NAME =>'TEST_POLICY', //POLICY的名称,主要用于将来对POLICY的管理
FUNCTION_SCHEMA =>'TEST1', //返回WHERE子句的函数所在SCHEMA名称
POLICY_FUNCTION =>'FN_GETPOLICY', //返回WHERE子句的函数名称
STATEMENT_TYPES =>'SELECT,INSERT,UPDATE,DELETE', //要使用该POLICY的DML类型
UPDATE_CHECK =>1, //仅适用于STATEMENT_TYPE为'INSERT,UPDATE',值为1或 0
ENABLE =>1 //是否启用,值为1或0
);
建立如上脱敏策略后,使用dexp导出并导入到其他环境测试。
导入到其他环境(这里导入到linux测试环境):
验证数据:
可以看到,使用RLS策略导出数据可以做到针对表的脱敏处理。
文章
阅读量
获赞