在创建细粒度审计(FGA)时,请对使用到的参数多加留意,防止因一时疏忽带来的使用不便。
本文给出一例因FGA参数书写不当导致的“PLS-00306: wrong number or types of arguments in call to 'ADD_POLICY'”问题。
1.初始化环境
1)创建用户并授权
sys@ora10g> create user test identified by test;
User created.
sys@ora10g> grant dba to test;
Grant succeeded.
2)在test用户下创建待审计的表T
sys@ora10g> conn test/test
Connected.
test@ora10g> create table t (x number(10), y varchar2(10));
Table created.
2.再现PLS-00306错误
test@ora10g> begin
2 dbms_fga.add_policy(
3 object_schema => 'TEST',
4 object_name=>'T',
5 policy_name=>'audit_test',
6 audit_condition=>'x<100',
7 audit_column=>'X',
8 enable=>true,
9 statement_type=>'SELECT,INSERT,UPDATE,DELETE'
10 );
11 end;
12 /
dbms_fga.add_policy(
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00306: wrong number or types of arguments in call to 'ADD_POLICY'
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored
在不知道问题出处的时候,看到这个报错后是否可以快速地定位问题?
到这里您可以停留10分钟,尝试排查一下这个故障。
……
……
……
……
……
3.查看DBMS_FGA包的使用描述信息
test@ora10g> desc dbms_fga
PROCEDURE ADD_POLICY
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
AUDIT_CONDITION VARCHAR2 IN DEFAULT
AUDIT_COLUMN VARCHAR2 IN DEFAULT
HANDLER_SCHEMA VARCHAR2 IN DEFAULT
HANDLER_MODULE VARCHAR2 IN DEFAULT
ENABLE BOOLEAN IN DEFAULT
STATEMENT_TYPES VARCHAR2 IN DEFAULT
AUDIT_TRAIL BINARY_INTEGER IN DEFAULT
AUDIT_COLUMN_OPTS BINARY_INTEGER IN DEFAULT
PROCEDURE DISABLE_POLICY
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
PROCEDURE DROP_POLICY
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
PROCEDURE ENABLE_POLICY
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
ENABLE BOOLEAN IN DEFAULT
相信具有犀利目光的您一定已经发现了问题的出处。
没错,就是因为“STATEMENT_TYPES”参数被错误地书写成了“STATEMENT_TYPE”导致的故障。这里少书写了一个字母“S”。
4.处理问题
定位问题后的处理是水到渠成的事情。我们尝试使用正确的“STATEMENT_TYPES”参数。
test@ora10g> begin
2 dbms_fga.add_policy(
3 object_schema => 'TEST',
4 object_name=>'T',
5 policy_name=>'audit_test',
6 audit_condition=>'x<100',
7 audit_column=>'X',
8 enable=>true,
9 statement_types=>'SELECT,INSERT,UPDATE,DELETE'
10 );
11 end;
12 /
PL/SQL procedure successfully completed.
FGA审计规则创建成功!
5.小结
本文给出的这个问题原因是简单的,但是往往平时就是由于这一类所谓“简单问题”浪费了我们大量宝贵时间。
如何防止出现此类问题的发生呢?答案很简单:细心、细心、还是细心!
Good luck.
secooler
11.07.18
-- The End --
本文给出一例因FGA参数书写不当导致的“PLS-00306: wrong number or types of arguments in call to 'ADD_POLICY'”问题。
1.初始化环境
1)创建用户并授权
sys@ora10g> create user test identified by test;
User created.
sys@ora10g> grant dba to test;
Grant succeeded.
2)在test用户下创建待审计的表T
sys@ora10g> conn test/test
Connected.
test@ora10g> create table t (x number(10), y varchar2(10));
Table created.
2.再现PLS-00306错误
test@ora10g> begin
2 dbms_fga.add_policy(
3 object_schema => 'TEST',
4 object_name=>'T',
5 policy_name=>'audit_test',
6 audit_condition=>'x<100',
7 audit_column=>'X',
8 enable=>true,
9 statement_type=>'SELECT,INSERT,UPDATE,DELETE'
10 );
11 end;
12 /
dbms_fga.add_policy(
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00306: wrong number or types of arguments in call to 'ADD_POLICY'
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored
在不知道问题出处的时候,看到这个报错后是否可以快速地定位问题?
到这里您可以停留10分钟,尝试排查一下这个故障。
……
……
……
……
……
3.查看DBMS_FGA包的使用描述信息
test@ora10g> desc dbms_fga
PROCEDURE ADD_POLICY
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
AUDIT_CONDITION VARCHAR2 IN DEFAULT
AUDIT_COLUMN VARCHAR2 IN DEFAULT
HANDLER_SCHEMA VARCHAR2 IN DEFAULT
HANDLER_MODULE VARCHAR2 IN DEFAULT
ENABLE BOOLEAN IN DEFAULT
STATEMENT_TYPES VARCHAR2 IN DEFAULT
AUDIT_TRAIL BINARY_INTEGER IN DEFAULT
AUDIT_COLUMN_OPTS BINARY_INTEGER IN DEFAULT
PROCEDURE DISABLE_POLICY
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
PROCEDURE DROP_POLICY
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
PROCEDURE ENABLE_POLICY
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
ENABLE BOOLEAN IN DEFAULT
相信具有犀利目光的您一定已经发现了问题的出处。
没错,就是因为“STATEMENT_TYPES”参数被错误地书写成了“STATEMENT_TYPE”导致的故障。这里少书写了一个字母“S”。
4.处理问题
定位问题后的处理是水到渠成的事情。我们尝试使用正确的“STATEMENT_TYPES”参数。
test@ora10g> begin
2 dbms_fga.add_policy(
3 object_schema => 'TEST',
4 object_name=>'T',
5 policy_name=>'audit_test',
6 audit_condition=>'x<100',
7 audit_column=>'X',
8 enable=>true,
9 statement_types=>'SELECT,INSERT,UPDATE,DELETE'
10 );
11 end;
12 /
PL/SQL procedure successfully completed.
FGA审计规则创建成功!
5.小结
本文给出的这个问题原因是简单的,但是往往平时就是由于这一类所谓“简单问题”浪费了我们大量宝贵时间。
如何防止出现此类问题的发生呢?答案很简单:细心、细心、还是细心!
Good luck.
secooler
11.07.18
-- The End --
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-702528/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/519536/viewspace-702528/