暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Oracle透明敏感数据保护屏蔽绑定值

askTom 2017-02-16
822

问题描述

嗨,

我正在尝试在数据库版本上使用Oracle透明敏感数据保护功能。12.1.0.2.0。
该计划是使用预定义的REDACT_AUDIT策略,以便隐藏引用敏感列的绑定变量。
我已经按照Oracle文档中解释的说明进行了操作https://docs.oracle.com/database/121/DBSEG/tsdp.htm#DBSEG810但它不起作用 (除非我错过了一些东西)。

这是我所做的:

1.
创建了一个包含CUST_ID列的表MYTAB,并填充了几千行;

2.
创建了一个敏感类型,并将其关联到列CUST_ID:

BEGIN
 DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE (
  sensitive_type  => 'CUSTOMER_ID',
  user_comment    => 'Customer id type');

 DBMS_TSDP_MANAGE.ADD_SENSITIVE_COLUMN(
 schema_name        => 'SCOTT',
 table_name         => 'MYTAB',
 column_name        => 'CUST_ID',
 sensitive_type     => 'CUSTOMER_ID',
 user_comment       => 'Bla bla bla');
END;
/

3.
将预定义策略REDACT_AUDIT关联到我的敏感类型:

begin
  dbms_tsdp_protect.ASSOCIATE_POLICY('REDACT_AUDIT', 'CUSTOMER_ID', true);
end;
/


4.
启用策略

begin
  dbms_tsdp_protect.ENABLE_PROTECTION_COLUMN(policy => 'REDACT_AUDIT');
end;
/



在MYTAB上执行带有where条件的动态查询后

其中cust_id = :b

我期望,如文档中所述,不能从系统视图中读取任何绑定值 (只是指我的敏感列),但我可以通过查询V $ SQL_BIND_CAPTURE完美地看到它们。
我做错了什么?
非常感谢!

专家解答

从文档中:

“REDACT_AUDIT透明敏感数据保护策略在审计记录,跟踪文件和V $ SQL_BIND_DATA视图查询中将数据显示为星号 (*)”

我怀疑不包括v $ sql_bind_capture可能是一个疏忽。例如,FGA日志按预期编辑

SQL> create table scott.mytab ( CUST_ID varchar2(10));

Table created.

SQL> insert into scott.mytab values ('Connor');

1 row created.

SQL>
SQL> BEGIN
  2   DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE (
  3    sensitive_type  => 'CUSTOMER_ID',
  4    user_comment    => 'Customer id type');
  5
  6   DBMS_TSDP_MANAGE.ADD_SENSITIVE_COLUMN(
  7   schema_name        => 'SCOTT',
  8   table_name         => 'MYTAB',
  9   column_name        => 'CUST_ID',
 10   sensitive_type     => 'CUSTOMER_ID',
 11   user_comment       => 'Bla bla bla');
 12  END;
 13  /

PL/SQL procedure successfully completed.

SQL>
SQL>
SQL> begin
  2    dbms_tsdp_protect.ENABLE_PROTECTION_COLUMN(policy => 'REDACT_AUDIT');
  3  end;
  4  /

PL/SQL procedure successfully completed.

 SQL> begin
   2   dbms_fga.add_policy
   3   ( object_schema => 'SCOTT',
   4   object_name => 'MYTAB',
   5   policy_name => 'MYTAB_POL',
   6   audit_condition => '1=1',
   7   audit_column => 'CUST_ID' );
   8   end;
   9   /
 
 PL/SQL procedure successfully completed.
 
 SQL> variable b1 varchar2(10)
 SQL> exec :b1 := 'Connor';
 
 PL/SQL procedure successfully completed.
 
 SQL> select /*transdata*/ * from scott.mytab where cust_id = :b1;
 
 CUST_ID
 ----------
Connor
 
 SQL> @pt "select * from sys.fga_log$"
 
 SESSIONID                     : 4020958
 TIMESTAMP#                    :
 DBUID                         : MCDONAC
 OSUID                         : COMCDONA-AU\comcdona
 OSHST                         : ORADEV\COMCDONA-AU
 CLIENTID                      :
 EXTID                         : COMCDONA-AU\comcdona
 OBJ$SCHEMA                    : SCOTT
 OBJ$NAME                      : MYTAB
 POLICYNAME                    : MYTAB_POL
 SCN                           : 118891021
 SQLTEXT                       :
 LSQLTEXT                      : select /*transdata*/ * from scott.mytab where cust_id = :b1
 SQLBIND                       :
 COMMENT$TEXT                  :
 PLHOL                         :
 STMT_TYPE                     : 1
 NTIMESTAMP#                   : 19-FEB-17 03.57.17.397000 AM
 PROXY$SID                     :
 USER$GUID                     :
 INSTANCE#                     : 0
 PROCESS#                      : 9924:22908
 XID                           :
 AUDITID                       :
 STATEMENT                     : 16
 ENTRYID                       : 2
 DBID                          : 1914458800
 LSQLBIND                      :  #1(1):*
 OBJ$EDITION                   :
 
 
 PL/SQL procedure successfully completed.
 
SQL>
 


我会在支持下记录一个电话-这可能是一个错误。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论