前两天看文档提到AUDIT IN SESSION CURRENT方式,无法通过NOAUDIT命令取消审计,只有用户退出连接审计设置才自动结束。
先来看正常的审计特点:
SQL> conn yangtk/yangtk
已连接。
SQL> create table t_1 (id number);
表已创建。
SQL> select owner, obj_name, action_name
2 from user_audit_trail
3 where action_name = 'CREATE TABLE'
4 and timestamp > trunc(sysdate);
未选定行
SQL> audit create table;
审计已成功。
SQL> create table t_2 (id number);
表已创建。
SQL> select owner, obj_name, action_name
2 from user_audit_trail
3 where action_name = 'CREATE TABLE'
4 and timestamp > trunc(sysdate);
未选定行
SQL> conn yangtk/yangtk
已连接。
SQL> create table t_3 (id number);
表已创建。
SQL> select owner, obj_name, action_name
2 from user_audit_trail
3 where action_name = 'CREATE TABLE'
4 and timestamp > trunc(sysdate);
OWNER OBJ_NAME ACTION_NAME
---------- ---------- ----------------------------
YANGTK T_3 CREATE TABLE
SQL> noaudit create table;
审计未成功。
SQL> create table t_4 (id number);
表已创建。
SQL> select owner, obj_name, action_name
2 from user_audit_trail
3 where action_name = 'CREATE TABLE'
4 and timestamp > trunc(sysdate);
OWNER OBJ_NAME ACTION_NAME
---------- ---------- ----------------------------
YANGTK T_3 CREATE TABLE
YANGTK T_4 CREATE TABLE
SQL> conn yangtk/yangtk
已连接。
SQL> create table t_5 (id number);
表已创建。
SQL> select owner, obj_name, action_name
2 from user_audit_trail
3 where action_name = 'CREATE TABLE'
4 and timestamp > trunc(sysdate);
OWNER OBJ_NAME ACTION_NAME
---------- ---------- ----------------------------
YANGTK T_3 CREATE TABLE
YANGTK T_4 CREATE TABLE
这说明审计的设置和取消都只对命令发出后的会话有效,而已经在运行的会话是不受这个命令影响的。
新特性IN SESSION CURRENT方式改变了这一点,使得审计对且仅对当前会话生效:
SQL> audit create table in session current;
审计已成功。
SQL> create table t_6 (id number);
表已创建。
SQL> select owner, obj_name, action_name
2 from user_audit_trail
3 where action_name = 'CREATE TABLE'
4 and timestamp > trunc(sysdate);
OWNER OBJ_NAME ACTION_NAME
---------- ---------- ----------------------------
YANGTK T_3 CREATE TABLE
YANGTK T_4 CREATE TABLE
YANGTK T_6 CREATE TABLE
由于Oracle没有提供NOAUDIT IN SESSION CURRENT语法,而直接NOAUDIT又对当前会话不生效,显然是没有办法取消IN SESSION CURRENT的审计设置的。
SQL> noaudit create table in session current;
noaudit create table in session current
*
第 1 行出现错误:
ORA-46342: 不能对 IN SESSION 子句执行 NOAUDIT 命令
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-678591/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-678591/