ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle audit 初步(摘自 wayne__lau的专栏)

oracle audit 初步(摘自 wayne__lau的专栏)

原创 Linux操作系统 作者:benn_wpj 时间:2008-09-24 21:28:52 0 删除 编辑

Oracle管理员手册比较详细的描述了审计(audit)的概念已经如何审计的实施。

相对与其他特性,审计相对容易一些,通过阅读文档并结合自己的测试,发现以下几点需要注意,这几点是文档上没有描述、或描述的不够详细甚至是描述错误的。

1.对于权限审计和大部分语句,by session无效,无论指定by session/by access还是不指定,审计都自动为by access。

2.审计的语句级可以指定ALL,但是ALL只包括大部分语句,它不包括下面这些语句。

ALTER SEQUENCE, ALTER TABLE, COMMENT TABLE, DELETE TABLE, EXECUTE PROCEDURE, GRANT DIRECTORY, GRANT PROCEDURE, GRANT SEQUENCE, GRANT TABLE, GRANT TYPE, INSERT TABLE, LOCK TABLE, SELECT SEQUENCE, SELECT TABLE, UPDATE TABLE

3.对于语句和权限审计,生效从执行语句后下一个登陆用户开始,当前的所有session不受影响。而对象的审计,则从审计语句开始后对当前所有的用户生效。

4.可以使用NOAUDIT ALL、NOAUDIT ALL PRIVILEGE取消所有的语句、权限的审计,但是如果在审计的时候指定了用户,则NOAUDIT ALL或NOAUDIT ALL PRIVILEGE的时候,不会取消这些明确用户的审计,必须在NOAUDIT的时候也明确的指出相应的用户。

下面通过四个例子说明:


1.只有少数语句审计可以设置BY SESSION,其他的语句审计和所有权限审计都只能设置为BY ACCESS。

SQL> audit create table;

审计已成功。

SQL> audit create any table by session;

审计已成功。

SQL> audit create view by access;

审计已成功。

SQL> select user_name, privilege, success, failure from dba_priv_audit_opts;

USER_NAME            PRIVILEGE                    SUCCESS    FAILURE
-------------------- ---------------------------- ---------- --------
                     CREATE TABLE                 BY ACCESS  BY ACCESS
                     CREATE ANY TABLE             BY ACCESS  BY ACCESS
                     CREATE VIEW                  BY ACCESS  BY ACCESS

SQL> NOAUDIT ALL PRIVILEGE;

审计未成功。

SQL> AUDIT TABLE;

审计已成功。

SQL> AUDIT VIEW BY SESSION;

审计已成功。

SQL> AUDIT TRIGGER BY ACCESS;

审计已成功。

SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

USER_NAME               AUDIT_OPTION            SUCCESS    FAILURE
----------------------- ----------------------- ---------- ----------
                        TRIGGER                 BY ACCESS  BY ACCESS
                        TABLE                   BY ACCESS  BY ACCESS
                        VIEW                    BY ACCESS  BY ACCESS

SQL> AUDIT LOCK TABLE BY SESSION;

审计已成功。

SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

USER_NAME               AUDIT_OPTION            SUCCESS    FAILURE
----------------------- ----------------------- ---------- ----------
                        TRIGGER                 BY ACCESS  BY ACCESS
                        TABLE                   BY ACCESS  BY ACCESS
                        VIEW                    BY ACCESS  BY ACCESS
                        LOCK TABLE              BY SESSION BY SESSION

通过测试,我们发现对于大部分的语句和权限,只能设置为BY ACCESS。

2.接着上面的例子

我们取消对所有语句的审计,但是发现对于LOCK TABLE无效

SQL> NOAUDIT ALL;

审计未成功。

SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

USER_NAME              AUDIT_OPTION           SUCCESS    FAILURE
---------------------- ---------------------- ---------- -------
                       LOCK TABLE             BY SESSION BY SESSION

SQL> NOAUDIT LOCK TABLE;

审计未成功。

SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

未选定行

3.

SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

未选定行

SQL> SELECT USERID, ACTION#, OBJ$NAME, PRIV$USED FROM SYS.AUD$;

未选定行

SQL> AUDIT TABLE;

审计已成功。

SQL> AUDIT CREATE ANY TABLE;

审计已成功。

SQL> AUDIT SELECT ON TEST;

审计已成功。

SQL> CREATE TABLE TEST_AUDIT (ID NUMBER);

表已创建。

SQL> CREATE TABLE TEST.TEST_AUDIT (ID NUMBER);

表已创建。

SQL> SELECT COUNT(*) FROM TEST;

  COUNT(*)
----------
     18651

SQL> SELECT USERID, ACTION#, OBJ$NAME, PRIV$USED FROM SYS.AUD$;

USERID                     ACTION# OBJ$NAME                 PRIV$USED
----------------------- ---------- ----------------------- ----------
YANGTK                         103 TEST

SQL> DROP TABLE TEST_AUDIT;

表已丢弃。

SQL> DROP TABLE TEST.TEST_AUDIT;

表已丢弃。

SQL> SELECT USERID, ACTION#, OBJ$NAME, PRIV$USED FROM SYS.AUD$;

USERID                     ACTION# OBJ$NAME                 PRIV$USED
----------------------- ---------- ----------------------- ----------
YANGTK                         103 TEST

我们发现只有对象审计生效了,要使语句级审计和权限级审计生效,必须重新登陆。

SQL> CONN YANGTK/YANGTK@TEST
已连接。
SQL> CREATE TABLE TEST_AUDIT (ID NUMBER);

表已创建。

SQL> CREATE TABLE TEST.TEST_AUDIT (ID NUMBER);

表已创建。

SQL> SELECT COUNT(*) FROM TEST;

  COUNT(*)
----------
     18651

SQL> SELECT USERID, ACTION#, OBJ$NAME, PRIV$USED FROM SYS.AUD$;

USERID                     ACTION# OBJ$NAME                 PRIV$USED
----------------------- ---------- ----------------------- ----------
YANGTK                           1 TEST_AUDIT                      41
YANGTK                         103 TEST
YANGTK                         103 TEST
YANGTK                           1 TEST_AUDIT                      40

4.

SQL> NOAUDIT ALL;

审计未成功。

SQL> NOAUDIT ALL PRIVILEGE;

审计未成功。

SQL> NOAUDIT SELECT ON TEST;

审计未成功。

SQL> AUDIT TABLE;

审计已成功。

SQL> AUDIT VIEW BY YANGTK;

审计已成功。

SQL> AUDIT TABLE BY TEST;

审计已成功。

SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

USER_NAME               AUDIT_OPTION            SUCCESS    FAILURE
----------------------- ----------------------- ---------- -------
                        TABLE                   BY ACCESS  BY ACCESS
TEST                    TABLE                   BY ACCESS  BY ACCESS
YANGTK                  VIEW                    BY ACCESS  BY ACCESS

SQL> NOAUDIT ALL;

审计未成功。

SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

USER_NAME               AUDIT_OPTION           SUCCESS    FAILURE
----------------------- ---------------------- ---------- --------
TEST                    TABLE                   BY ACCESS  BY ACCESS
YANGTK                  VIEW                    BY ACCESS  BY ACCESS

SQL> NOAUDIT TABLE BY TEST;

审计未成功。

SQL> NOAUDIT VIEW BY YANGTK;

审计未成功。

SQL> SELECT USER_NAME, AUDIT_OPTION, SUCCESS, FAILURE FROM DBA_STMT_AUDIT_OPTS;

未选定行

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

上一篇: 10g ocp倒計時
请登录后发表评论 登录
全部评论

注册时间:2008-04-26

  • 博文量
    57
  • 访问量
    128380