Oracle Data Redaction实验记录

Oracle从11.2.0.4以后新增了数据校订作为一个新的安全特性。Oracle Data Redaction(Oracle数据校订),它提供了一个有效且易于实现的方法来屏蔽敏感信息。该工具能够实时地从数据校订得出的查询结果会返回到它们原来的应用程序。当你想要隐藏一个字段的所有值或部分值,但同时还要为用户提供他们需要的信息的时候,Data Redaction便有了用武之地。诸如社会保险号,信用卡号和客户端IP地址之类的个人标识未经许可是不能发布的。通过允许你隐藏个人信息并同时仍允许访问关
键文件,Data Redaction将帮助你遵循法规和行业标准,同时保证不中断业务的正常流程。

下面以TT.DEPT表为例,对DNAME列进行data redaction,这意味着除了TT自己,其它用户在对tt.dept表进行查询时将看不会看到真实数据(当然这不包括SYS及SYSTEM用户),以下是我的操作记录:

登录Cloud Control 12c,选择测试数据库-->Security-->Data Redaction
Oracle Data Redaction实验记录_第1张图片

在Data Redaction页面中点击Create按钮,新建一个Data Redaction Policies
Oracle Data Redaction实验记录_第2张图片
这里我选择对TT.DEPT表进行data redaction. 在策略中我写入的是该策略对非TT用户生效。
Oracle Data Redaction实验记录_第3张图片
Oracle Data Redaction实验记录_第4张图片
点击上面的Edit按钮后,选择ADD添加DNAME列。
Oracle Data Redaction实验记录_第5张图片
点击OK按钮以后,Data Redaction Policy就创建好了,下面通过查询具体验证下效果。
Oracle Data Redaction实验记录_第6张图片

--TT用户登录后可以查看真实的数据
TT@BWC2(dm02db02)> show user
USER is "TT"
TT@BWC2(dm02db02)> select * from tt.dept;

DEPTNO DNAME LOC
---------- ---------- --------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON

--T2用户登录后,虽然对tt.dept表有查询权限,但他看到的DNAME列却为空,并不是真实的数据。
SYS@BWC2(dm02db02)> conn t2/t2
Connected.
SYS@BWC2(dm02db02)> select * from tt.dept;

DEPTNO DNAME   LOC
---------- ----------     --------------------
10                           NEW YORK
20                           DALLAS
30                           CHICAGO
40                           BOSTON


如果没有Cloud Control 12c的环境,还是通过PLSQL方式来管理data redaction的,下面是一些记录:
--有关data redaction的几个视图
REDACTION_COLUMNS
REDACTION_POLICIES
REDACTION_VALUES_FOR_TYPE_FULL


create table employee(id number,name varchar2(10),salary number,jobdate date,mobile varchar2(20));
insert into employee values(1,'tom',6000,to_date('01-07-2012','dd-mm-yyyy'),'135-2009-1146');
insert into employee values(2,'mary',9000,to_date('01-07-2013','dd-mm-yyyy'),'135-2009-1111');
commit;
select * from employee;

--针对NUMBER类型的列进行redaction
begin 
dbms_redact.add_policy(
object_schema=>'tt',
object_name=>'employee',
policy_name=>'p1',
column_name=>'salary',
function_type=>dbms_redact.full,
enable=>true,
expression=>'1=1');
end;
/

--针对varchar2类型的列进行redaction
begin 
dbms_redact.alter_policy(
object_schema=>'tt',
object_name=>'employee',
policy_name=>'p1',
column_name=>'name',
action=>dbms_redact.add_column,
function_type=>dbms_redact.full,
expression=>'1=1');
end;
/

--针对date类型的列进行redaction
begin 
dbms_redact.alter_policy(
object_schema=>'tt',
object_name=>'employee',
policy_name=>'p1',
column_name=>'jobdate',
action=>dbms_redact.add_column,
function_type=>dbms_redact.full,
expression=>'1=1');
end;
/

--添加一条策略,使不是TT的用户查看该表时数据被redaction
begin 
dbms_redact.alter_policy(
object_schema=>'tt',
object_name=>'employee',
policy_name=>'p1',
action=>dbms_redact.modify_expression,
expression=>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''TT''');
end;
/

删除遮罩保护策略 
EXEC DBMS_REDACT.DROP_POLICY('TT','EMPLOYEE','p1'); 
启用遮罩保护策略 
EXEC DBMS_REDACT.ENABLE_POLICY ('TT','EMPLOYEE','p1');
禁用遮罩保护策略 
EXEC DBMS_REDACT.DISABLE_POLICY ('TT','EMPLOYEE','p1');

--通过授予以下权限达到访问真实数据目的

SQL> grant exempt redaction policy to user1;
Grant succeeded.

SQL> revoke exempt redaction policy from user1;
Revoke succeeded.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26753337/viewspace-2121057/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26753337/viewspace-2121057/

你可能感兴趣的:(Oracle Data Redaction实验记录)