ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle11gr2 审计语句增强(二)

Oracle11gr2 审计语句增强(二)

原创 Linux操作系统 作者:yangtingkun 时间:2010-02-09 23:25:59 0 删除 编辑

在11.2中,Oracle对于AUDIT语句进行了增强。

这一篇介绍将AUDIT的IN SESSION CURRENT语句。

Oracle11gr2 审计语句增强(一):http://yangtingkun.itpub.net/post/468/496714

 

 

在11.2中,AUDIT增加了IN SESSION CURRENT语句,可以只审计当前的会话。这对于检查当前会话执行了那么操作十分有帮助。

SQL> SELECT * FROM V$VERSION;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> SHOW USER
USER
为 "YANGTK"

下面在另一个会话中创建表:

SQL> SET SQLP 'SQL2> '
SQL2> SHOW USER
USER
为 "TEST"
SQL2> CREATE TABLE T_AUDIT1 (ID NUMBER);

表已创建。

在会话1中检查AUD$记录:

SQL> SELECT SESSIONID, OBJ$CREATOR, OBJ$NAME
  2  FROM SYS.AUD$
  3  WHERE NTIMESTAMP# >= TRUNC(SYSDATE);

未选定行

没有检查到任何记录,这是因为AUDIT选项并没有打开,在会话1打开AUDIT CREATE TABLE:

SQL> AUDIT CREATE TABLE;

审计已成功。

在会话2上再次建表:

SQL2> CREATE TABLE T_AUDIT2 (ID NUMBER);

表已创建。

再次检查AUDIT记录:

SQL> SELECT SESSIONID, OBJ$CREATOR, OBJ$NAME
  2  FROM SYS.AUD$
  3  WHERE NTIMESTAMP# >= TRUNC(SYSDATE);

未选定行

仍然没有记录,这是因为AUDIT对于当前已经连接的会话不生效,只有重新连接的会话才有效:

SQL2> CONN TEST/TEST
已连接。
SQL2> CREATE TABLE T_AUDIT3 (ID NUMBER);

表已创建。

在会话1中检查AUDIT记录:

SQL> SELECT SESSIONID, OBJ$CREATOR, OBJ$NAME
  2  FROM SYS.AUD$
  3  WHERE NTIMESTAMP# >= TRUNC(SYSDATE);

 SESSIONID OBJ$CREATOR                    OBJ$NAME
---------- ------------------------------ ------------------------------
     94943
     94946
     94946 TEST                           T_AUDIT3

现在AUDIT记录中包含了3条记录,前面两条分别是会话断开和会话登陆的AUDIT记录,最后一条就是CREATE TABLE产生的审计记录。

SQL> NOAUDIT CREATE TABLE;

审计未成功。

SQL> AUDIT CREATE TABLE IN SESSION CURRENT;

审计已成功。

关闭CREATE TABLE的审计,设置当前会话的CREATE TABLE审计。

SQL2> CONN TEST/TEST
已连接。
SQL2> CREATE TABLE T_AUDIT4 (ID NUMBER);

表已创建。

在会话2上重新登陆,并建表。

SQL> SELECT SESSIONID, OBJ$CREATOR, OBJ$NAME
  2  FROM SYS.AUD$
  3  WHERE NTIMESTAMP# >= TRUNC(SYSDATE);

 SESSIONID OBJ$CREATOR                    OBJ$NAME
---------- ------------------------------ ------------------------------
     94943
     94946
     94946 TEST                           T_AUDIT3
     94941
     94941
     94941
     94941
     94946
     94950

已选择9行。

可以看到会话2上的CREATE TABLE并未被审计,下面在当前会话执行CREATE TABLE:

SQL> CREATE TABLE T_AUDIT (ID NUMBER);

表已创建。

SQL> SELECT SESSIONID, OBJ$CREATOR, OBJ$NAME
  2  FROM SYS.AUD$
  3  WHERE NTIMESTAMP# >= TRUNC(SYSDATE);

 SESSIONID OBJ$CREATOR                    OBJ$NAME
---------- ------------------------------ ------------------------------
     94943
     94946
     94946 TEST                           T_AUDIT3
     94941
     94941
     94941
     94941
     94946
     94950
     94941 YANGTK                         T_AUDIT

已选择10行。

使用了IN SESSION CURRENT语句,使得审计马上对当前会话生效,而不会对其他的会话进行审计。

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-627163/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077344