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

Oracle FGA审计条件查询

askTom 2016-05-30
340

问题描述

我必须为特定列创建具有多个值的Oracle FGA策略,例如。一个临时表,它有stat列,数据是('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o')和我要从审核策略创建时排除stat ='a'或'b',但当我更新策略谓词时,它给出“ora-28138错误”

开始
DBMS_FGA.ADD_POLICY(
对象=>'Scott',
对象名称=>'临时',
policy_name =>'Salary_change',
audio_列=>'stat',
audit_条件=>'stat<>''a''或stat <>''b''',
启用=>真,
语句类型=>'UPDATE',
稽核_track => DBMS_FGA.DB + DBMS_FGA.EXTED );
结束;

无法更新下面的错误“or-28138错误在策略谓词中”
更新温度设置sal =5500 ,其中stat ='a';
更新温度设置sal = 5500 ,其中stat ='b';
更新温度设置sal = 5500 ,其中stat ='c';

请引导,谢谢。

专家解答

从文档中:

http://docs.oracle.com/database/121/ARPLS/d_fga.htm#ARPLS015

------------------------------------
审计条件必须是布尔表达式,可以使用正在插入、更新或删除的行中的值进行计算。表达式还可以使用函数,如用户函数或SYS_CONTEXT函数。

表达式不能使用AND和OR等运算符组合条件。审计条件可以为NULL (或省略) ,这被解释为TRUE ,但它不能包含以下元素:

子查询或序列

当使用SYS_CONTEXT函数访问时,将使用以下属性:

当前SQL

当前SQL_LENGTH

当前绑定

对伪列的任何使用。

为实现此目的,不再需要指定审计条件“1=1”以强制审计影响指定列的所有指定语句(“语句类型”) (“审计_列”)。即使未处理任何行,也会发生审计,因此,对具有此策略的表的所有操作都会进行审计。
------------------------------------

所以你需要为你的表达想出其他的选择

SQL> create table t as
  2  select e.*,'a' stat
  3  from scott.emp e
  4  union all
  5  select e.*,'b' stat
  6  from scott.emp e
  7  union all
  8  select e.*,'c' stat
  9  from scott.emp e
 10  /

Table created.

SQL> grant all on t to scott;

Grant succeeded.

SQL> begin
  2  DBMS_FGA.ADD_POLICY(
  3    object_schema => user,
  4    object_name => 'T',
  5    policy_name => 'SALARY_CHANGE',
  6    audit_column => 'STAT',
  7    audit_condition => q'{regexp_count(STAT,'(a|b)')=0}',
  8    enable => TRUE,
  9    statement_types => 'UPDATE',
 10    audit_trail => DBMS_FGA.DB + DBMS_FGA.EXTENDED );
 11  end;
 12  /

PL/SQL procedure successfully completed.

SQL> conn scott/tiger
Connected.

SQL> update mcdonac.t set sal = 5500 where stat = 'a';

14 rows updated.




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

评论