yangtingkun
===========================================================
Oracle11gr2 审计语句增强(二)
===========================================================

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

这一篇介绍将AUDITIN 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语句,使得审计马上对当前会话生效,而不会对其他的会话进行审计。

yangtingkun 发表于:2010.02.09 23:25 ::分类: ( ORACLE ) ::阅读:(1495次) :: 评论 (2)
re: Oracle11gr2 审计语句增强(二) [回复]

除了当前自己,能不能审计指定的会话?

jieyancai 评论于: 2010.02.10 08:41
re: Oracle11gr2 审计语句增强(二) [回复]

目前还不能

yangtingkun 评论于: 2010.02.10 16:26

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...