12c_Data redaction 数据编写策略

当低权限的用户查询列中的数据时,oracle redaction会对返回给用户的数据稍作掩饰,以保证机密数据的安全。对于列中的数据有以下几种redaction方式:

1.Full redaction. 对列中的数据全部redactnumber类型的列将全部返回为0character类型的列将全部返回为空格,日期类型返回为2001-01-01

2.Partial redaction. 对列中的一部分数据进行redact,比如,可以对社会保险号的前几位设置返回为*,剩下的几位保持不变。只有列中的数据为固定宽度时才能使用这种方式,如果列中存储的是email地址,每个email地址的宽度不尽相同,此时要使用Regular expressions

3.Regular expressions. You can use regular expressions to look for patterns of data to redact. For example, you can use regular expressions to redact email addresses, which can have varying character lengths. It is designed for use with character data only.

4.Random redaction. The redacted data presented to the querying user appears as randomly generated values each time it is displayed, depending on the data type of the column.

5.No redaction. This option enables you to test the internal operation of your redaction policies, with no effect on the results of queries against tables with policies defined on them. You can use this option to test the redaction policy definitions before applying them to a production environment.

重点关注:

不能对syssystem用户进行数据的redact。因为他们都有EXP_FULL_DATABASE这个角色而这个角色又包含了EXEMPT REDACTION POLICY系统权限。同理,也不能直接赋予用户dba权限,dba自动包含EXP_FULL_DATABASE角色。

redaction类型由dbms_redact.add_policy中的function_type来控制,默认为full redaction

function_type=>dbms_redact.full; / function_type=>dbms_redact.partial; / function_type=>dbms_redact.random;

测试验证:

1、创建测试表

SQL> create table xulq.xiaoxu_v1 as select * from dba_tables where rownum<10;
表已创建。

2、策略验证:

2.1 full redaction的验证(number)

---创建策略前查询:

SQL> select sample_size from xulq.xiaoxu_v1;
SAMPLE_SIZE
-----------
       6432
       2387
         10
          0
       4409
         60
     111623
        131
       3450
已选择9行。

---创建策略

SQL> 

begin dbms_redact.add_policy(
  object_schema=>'xulq',
  object_name=>'xiaoxu_v1',
  policy_name=>'p1',
  column_name=>'sample_size',
  function_type=>dbms_redact.full,
  enable=>true,
  expression=>'1=1');
end;
/

---以测试用户CESHI登录查询

sql> select owner,sample_size from xulq.xiaoxu_v1;

OWNER      SAMPLE_SIZE
---------- -----------
SYS                  0
SYS                  0
SYS                  0
SYS                  0
SYS                  0
SYS                  0
SYS                  0
SYS                  0
SYS                  0   ----全部显示“0”

##full redaction的验证(char)

begin dbms_redact.alter_policy(
  object_schema=>'xulq',
  object_name=>'xiaoxu_v1',
  policy_name=>'p1',
  column_name=>'table_name',
  action=>dbms_redact.add_column,
  function_type=>dbms_redact.full,
  expression=>'1=1');
end;
/

SQL> select owner,table_name,sample_size from xulq.xiaoxu_v1;
OWNER      TABLE_NAME           SAMPLE_SIZE
---------- -------------------- -----------
SYS                                       0
SYS                                       0
SYS                                       0
SYS                                       0
SYS                                       0
SYS                                       0
SYS                                       0
SYS                                       0
SYS                                       0   ----table_name列为空
已选择9行。

##full redaction的验证(date)

SQL> select owner,table_name,sample_size,last_analyzed from xulq.xiaoxu_v1;
OWNER      TABLE_NAME           SAMPLE_SIZE LAST_ANALYZED
---------- -------------------- ----------- --------------
SYS                                       0 01-1月 -01
SYS                                       0 01-1月 -01
SYS                                       0 01-1月 -01
SYS                                       0 01-1月 -01
SYS                                       0 01-1月 -01
SYS                                       0 01-1月 -01
SYS                                       0 01-1月 -01
SYS                                       0 01-1月 -01
SYS                                       0 01-1月 -01  ---last_analyzed 全部显示为:“01-1月 -01”
已选择9行。

##partial redaction的验证(char)

begin 
dbms_redact.alter_policy(
  object_schema=>'xulq',
  object_name=>'xiaoxu_v1',
  policy_name=>'p1',
  column_name=>'owner',
  action=>dbms_redact.add_column,
  function_type=>dbms_redact.partial,
  expression=>'1=1',
  function_parameters=>'VVVFVVVVFVVVV,VVV-VVVV-VVVV,*,1,3');
end;
/
SQL> select owner,table_name,sample_size,last_analyzed from xulq.xiaoxu_v1;
OWNER      TABLE_NAME           SAMPLE_SIZE LAST_ANALYZED
---------- -------------------- ----------- --------------
***                                       0 01-1月 -01
***                                       0 01-1月 -01
***                                       0 01-1月 -01
***                                       0 01-1月 -01
***                                       0 01-1月 -01
***                                       0 01-1月 -01
***                                       0 01-1月 -01
***                                       0 01-1月 -01
***                                       0 01-1月 -01
已选择9行。

###drop 策略验证

begin 
dbms_redact.alter_policy(
  object_schema=>'xulq',
  object_name=>'xiaoxu_v1',
  policy_name=>'p1',
  column_name=>'owner',
  action=>dbms_redact.drop_column, 
  expression=>'1=1');
end;

/

3、有编写策略的表不允许ctas操作

用户可以对xiaoxu_v1表进行dml操作,但是不能基于xiaoxu_v1表进行ctas操作。如下:

SQL> create table ceshi.table_test01 as select * from xulq.xiaoxu_v1;
create table ceshi.table_test01 as select * from xulq.xiaoxu_v1
* 第 1 行出现错误:

ORA-28081: 权限不足 - 命令引用了已经过编写的对象。


4、修改policy使得其他用户可以访问到真实数据

begin 
dbms_redact.alter_policy(
  object_schema=>'xulq',
  object_name=>'xiaoxu_v1',
  policy_name=>'p1',
  column_name=>'owner',
  action=>dbms_redact.modify_expression,
  expression=>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''CESHI''');
end;
/

SQL> select owner,table_name,sample_size,last_analyzed from xulq.xiaoxu_v1;
OWNER      TABLE_NAME           SAMPLE_SIZE LAST_ANALYZED
---------- -------------------- ----------- --------------
SYS        ICOL$                       6432 24-11月-15
SYS        TAB$                        2387 24-11月-15
SYS        CLU$                          10 07-7月 -14
SYS        PROXY_DATA$                    0 07-7月 -14
SYS        IND$                        4409 19-2月 -16
SYS        BOOTSTRAP$                    60 07-7月 -14
SYS        COL$                      111623 24-11月-15
SYS        USER$                        131 19-2月 -16
SYS        SEG$                        3450 22-12月-15
已选择9行。

5、其他操作

---禁用编写策略
BEGIN
   DBMS_REDACT.DISABLE_POLICY (
     object_schema    => 'xulq',
     object_name      => 'xiaoxu_v1',
     policy_name      => 'CELV_XIAOXU_01');
END;

---启用编写策略
BEGIN
   DBMS_REDACT.ENABLE_POLICY (
      object_schema    =>  'XULQ',
      object_name      =>  'XIAOXU_01',
      policy_name      =>  'CELV_XIAOXU_01');
END;

---删除编写策略
BEGIN
   DBMS_REDACT.DROP_POLICY (
      object_schema    =>  'XULQ',
      object_name      =>  'XIAOXU_01',
      policy_name      =>  'CELV_XIAOXU_01');
END;



你可能感兴趣的:(oracle,数据库,数据,安全)