我正在尝试对某些用户的表行更改进行审核。
来自system我这样写的用户:
BEGIN
DBMS_FGA.add_policy (
object_schema => 'system',
object_name => 'my_fga_table',
policy_name => 'my_fga_policy_1',
statement_types => 'SELECT, INSERT, DELETE, UPDATE',
audit_condition => 'USER=''REFEREE_1'' OR USER=''REFEREE_2'''
);
END;
来自REFEREE_1尝试更改表格的用户:
UPDATE SYSTEM.my_fga_table SET points=90 WHERE boxer_name='BOXER_1';
但我收到一个错误:
Error at Command Line : 1 Column : 15
Error report -
SQL Error: ORA-28138: Ошибка в предикате политики
28138. 00000 - "Error in Policy Predicate"
*Cause: An invalid policy predicate was specified.
*Action: Please specify a valide policy Predicate for the FGA policy
问题是什么?
正如错误所说,问题出在谓词中。如果您查看会话的跟踪文件,则错误消息可能包含更多信息 - 谓词有什么问题:
对参数中指定的谓词
audit_condition施加了许多限制,文档中提到了这些限制:仅支持简单谓词,它们不能与
ANDor组合OR。一种可能的解决方案是使用具有更简单谓词的多个规则。
可以使用函数,例如以下将起作用:
或者为谓词中的条件创建自己的函数:
给定用户的审核条目: