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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13790829/viewspace-462935/