1. 实验环境
1.1笔记本电脑,windows xp系统
1.2 oracle10g 32位,非归档模式;
2. 步骤
2.1开启数据库的审计功能
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 1月 11 15:31:35 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
已连接。
SQL> show parameter audit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string E:\ORACLE\PRODUCT\10.2.0\ADMIN
\SNAPALL\ADUMP
audit_sys_operations boolean FALSE
audit_trail string NONE
SQL> --发现目前是未开启状态
SQL> alter system set audit_sys_operations=TRUE scope=spfile;
系统已更改。
SQL> alter system set audit_trail=db,extended scope=spfile;
系统已更改。
SQL> --开启审计需要重启实例;
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter audit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string E:\ORACLE\PRODUCT\10.2.0\ADMIN
\SNAPALL\ADUMP
audit_sys_operations boolean TRUE
audit_trail string DB, EXTENDED
SQL> --确认已经开启审计;
2.2创建测试表;
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 1月 11 15:39:29 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn baokang/shbk;
已连接。
SQL> create table test111(id number(10),name varchar2(40),bir date);
表已创建。
SQL> desc test111;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NUMBER(10)
NAME VARCHAR2(40)
BIR DATE
SQL> insert into test111 values(1,'jacky',to_date('1981-01-01','yyyy-mm-dd'));
已创建 1 行。
SQL> insert into test111 values(2,'jacky2',to_date('1982-01-01','yyyy-mm-dd'));
已创建 1 行。
SQL> insert into test111 values(3,'jacky3',to_date('1983-01-01','yyyy-mm-dd'));
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from test111;
ID NAME BIR
---------- ---------------------------------------- --------------
1 jacky 01-1月 -81
2 jacky2 01-1月 -82
3 jacky3 01-1月 -83
SQL>--创建测试表完成;
2.3创建存储过程
create or replace procedure deldata
as
begin
delete from test111 t where t.id=1;
commit;
end;
/
这个存储过程是删除表TEST111中的ID=1的那一行记录;
2.4对表TEST111进行审计,然后再执行存储过程,看在这种情况下是否审计有效!
SQL> select * from test111;
ID NAME BIR
----------- ---------------------------------------- -----------
1 jacky 1981-1-1
2 jacky2 1982-1-1
3 jacky3 1983-1-1
SQL> --测试表中目前3条数据;
SQL> --baokang用户是有DBA权限的用户,可以审计和看些审计视图;
SQL> audit delete on test111 by access;
Audit succeeded
SQL> select * from dba_audit_trail;
SQL> --现在没有任何审计信息,按照一般理解,假如有delete语句对test111进行删除操作,肯定会有审计信息,
SQL> --现在在这个会话中,我手动删除一条记录,看是否会有审计信息;
SQL> delete from test111 where id=3;
1 row deleted
SQL> commit;
Commit complete
SQL> --现在看下审计信息;
SQL> --有了一条,为了确认是我刚刚的操作产生的审计信息,将sql_text字段单独拿出来;
SQL> select sql_text from dba_audit_trail;
SQL_TEXT
--------------------------------------------------------------------------------
delete from test111 where id=3
SQL> --确认是刚刚的操作语句;
SQL> --我们来查询下表数据;
SQL> select * from test111;
ID NAME BIR
----------- ---------------------------------------- -----------
1 jacky 1981-1-1
2 jacky2 1982-1-1
SQL> --开始执行存储过程(关键一步);
SQL> exec deldata;
PL/SQL procedure successfully completed
SQL> --执行成功,现在我们先看下数据,是否ID=1的已经被删除;
SQL> select * from test111;
ID NAME BIR
----------- ---------------------------------------- -----------
2 jacky2 1982-1-1
SQL> --OK,确认已经删除;然后我们去看审计表里面是否有对应的审计信息;
SQL> --发现有2条数据,进一步看sql_text的内容;
SQL> select sql_text from dba_audit_trail;
SQL_TEXT
--------------------------------------------------------------------------------
delete from test111 where id=3
DELETE FROM TEST111 T WHERE T.ID=1
SQL> --发现oracle对存储过程中的delete语句也是有审计作用的;
SQL> --开始我是怀疑这个结果,现在相信了!
2.5确认是否数据库重启后,审计依然有效;
SQL> conn / as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 188746628 bytes
Database Buffers 415236096 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
数据库已经打开。
SQL> conn baokang/shbk;
已连接。
SQL> select * from test111;
ID NAME BIR
---------- ---------------------------------------- --------------
2 jacky2 01-1月 -82
SQL> select sql_text from dba_audit_trail;
SQL_TEXT
--------------------------------------------------------------------------------
delete from test111 where id=3
DELETE FROM TEST111 T WHERE T.ID=1
SQL> --和之前一样共2条记录;
SQL> insert into test111 values(4,'jacky4',to_date('1984-01-01','yyyy-mm-dd'));
已创建 1 行。
SQL> insert into test111 values(1,'jacky5',to_date('1985-01-01','yyyy-mm-dd'));
已创建 1 行。
SQL> commit;
提交完成。
SQL> delete from test111 where id=4;
已删除 1 行。
SQL> commit;
提交完成。
SQL> select sql_text from dba_audit_trail;
SQL_TEXT
--------------------------------------------------------------------------------
delete from test111 where id=3
DELETE FROM TEST111 T WHERE T.ID=1
delete from test111 where id=4
SQL> exec deldata;
PL/SQL 过程已成功完成。
SQL> select sql_text from dba_audit_trail;
SQL_TEXT
--------------------------------------------------------------------------------
delete from test111 where id=3
DELETE FROM TEST111 T WHERE T.ID=1
delete from test111 where id=4
DELETE FROM TEST111 T WHERE T.ID=1
SQL> --确认,即使重启数据库后,审计依然有效;