Rexdf

The devil is in the Details.

AUDIT in SESSION CURRENT无法NOAUDIT

| Comments

前两天看文档提到AUDIT IN SESSION CURRENT方式,无法通过NOAUDIT命令取消审计,只有用户退出连接审计设置才自动结束。

先来看正常的审计特点:

SQL> conn yangtk/yangtk 已连接。 SQL> create table t1 (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 t2 (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 t3 (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 T3 CREATE TABLE SQL> noaudit create table; 审计未成功。 SQL> create table t4 (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 T3 CREATE TABLE YANGTK T4 CREATE TABLE SQL> conn yangtk/yangtk 已连接。 SQL> create table t5 (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 T3 CREATE TABLE YANGTK T4 CREATE TABLE

这说明审计的设置和取消都只对命令发出后的会话有效,而已经在运行的会话是不受这个命令影响的。

新特性IN SESSION CURRENT方式改变了这一点,使得审计对且仅对当前会话生效:

SQL> audit create table in session current; 审计已成功。 SQL> create table t6 (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 T3 CREATE TABLE YANGTK T4 CREATE TABLE YANGTK T6 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命令

Comments