Oracle审计实验
审计就是查询用户在表上做了什么操作,如select,delete,insert等
一、打开审计功能 www.2cto.com
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u1/oracle/product/10.2.0/db_1
/rdbms/audit
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
可以发现没有开启:
audit_trail:
none表示审计功能没有开启
db 激活审计功能,审计信息及连接信息 user,time,object...
db_extented 连接信息及当时操作的SQL
开户审计功能: www.2cto.com
SQL> alter system set audit_trail=db_extended scope=spfile;
System altered.
重启
数据库生效:
SQL> startup force
再次查看审计功能是否开启:
audit_trail string DB_EXTENDED
发现已经开启了!!
二、设置要审计的表及操作
SQL> audit all on scott.emp by access;
审计scott用户emp表
我们再开启一个会话对scott用户的emp表做修改,查询及删除操作
[oracle@oracle ~]$ export ORACLE_SID=cy
[oracle@oracle ~]$ sqlplus scott/tiger
SQL> select * from emp;
SQL> delete from emp where ename='MILLER';
下面我们查看是否审计到了
SQL> desc dba_audit_trail
审计的内容都在这个视图下面
SQL> select USERNAME,USERHOST,TIMESTAMP,SQL_TEXT FROM dba_audit_trail;
USERNAME
------------------------------
USERHOST
--------------------------------------------------------------------------------
TIMESTAMP
---------
SQL_TEXT
--------------------------------------------------------------------------------
SCOTT
oracle.somnus.com
22-SEP-11
select * from emp
这是查询对emp表操作过的用户名,主机名,时间及执行的SQL语句
可以发现查询到了在另一个会话的查询及删除操作。
我们还可以查询执行的具体时间:
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
再在另一个会话查询一次
SQL>select * from emp;
我们发现上面显示得不好看,我们设置一下
SQL> col username format a30
SQL> col userhost format a30
SQL> col timestamp format a30
SQL> col sql_text format a30
SQL> set pagesize 60
SQL> /
USERNAME USERHOST
------------------------------ ------------------------------
TIMESTAMP SQL_TEXT
------------------------------ ------------------------------
SCOTT oracle.somnus.com
2011-09-22 19:33:32 select * from emp
SCOTT oracle.somnus.com
2011-09-22 19:33:48 delete from emp where ename='M
ILLER'
SCOTT oracle.somnus.com
2011-09-22 19:40:49 select * from emp
现在我们发现扫行操作的具体时间了
SQL>audit all on scott.emp by access;
审计所有
SQL> audit insert,update,delete on scott.dept by access;
仅审计dept表的插入,更新及删除操作
SQL> audit select ,delete on scott.dept whenever not successful;
审计dept表的查询,删除不论它是否成功
audit all on scott.emp whenever successful;
审计emp表的所有操作,只有当操作成功的时候
noaudit all on scott.dept;
取消对表的审计
SQL> audit select ,delete on scott.dept whenever not successful;
SQL> select * from scott.emp;
select * from scott.emp
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select USERNAME,USERHOST,TIMESTAMP,SQL_TEXT FROM dba_audit_trail;
USERNAME USERHOST
------------------------------ ------------------------------
TIMESTAMP SQL_TEXT
------------------------------ ------------------------------
SC