中⾃带的redo⽇志中包含insert,update,delete操作。但是不包含select操作。那如何查询到select的历史操作记录呢?从⽹上到了⼏种⽅法: 1、从交换机中进⾏配置来捕获相关的操作记录(已实现) 这种⽅法已经实现,对交换机进⾏配置⼝和观察⼝,数据通过时都会复制⼀份传到观察⼝。现在希望能从数据库本地获取操作记录。 2、Logminer⼯具查看oracle⾃⾝,不过审计select相关操作好像还需要进⾏别的配置(待调研,⽬前没到配制⽅法),⽽且好像因为操作问题,查看到的⽇志内容都不是实际操作内容。
3、细粒度审计FGA(待调研)
4、配置oracle⾃⾝的audit
//以下内容参考⾃⽹络,但是也是我实际操作过程和结果
①查看审计功能是否开启(本机已经开启,如果audit_sys_operations值为FALSE就是没开审计)
NAME TYPE VALUE
------------------------------------ ----------- ------- audit_file_dest string F:\APP\ADMINISTRATOR\ADMIN\ORCL\ADUMP audit_sys_operations boolean TRUE audit_trail string DB_EXTENDED
如果没有使⽤下⾯语句更改:
注意audit_trail要为DB_EXTENDED才记录执⾏的具体语句…
②、重启实例
③、针对某表的DML审计(错误的也记录)
④、对该表做各种DML操作
⽤dpi⽤户登录
⑤、查询审计信息
或者sqlplus /nolog SQL > CONN /AS SYSDBA SQL > show parameter audit
1
2日志审计
3SQL > alter system set audit_sys_operations =TRUE scope =spfile ;SQL > alter system set audit_trail =db_extended scope =spfile ;
1
2SQL > shutdown immediate ;SQL > startup
1
2SQL > AUDIT UPDATE ,DELETE ,INSERT ON T_TEST by access ;
1SQL > conn dpi /dpi SQL > create table t_test as select * from emp ; SQL > update t_test set emp1='111'; * 第 1 ⾏出现错误: ORA -00904: "EMP1": 标识符⽆效 SQL > delete from t_test where rownum =1;已删除 1 ⾏。
SQL > commit ;
1
2
3
4
5
6SQL > select EXTENDED_TIMESTAMP ,SESSION_ID ,SQL_TEXT from DBA_COMMON_AUDIT_TRAIL ORDER BY EXTENDED_TIMESTAMP DESC 1SQL > select EXTENDED_TIMESTAMP ,SESSION_ID ,SQL_TEXT from DBA_COMMON_AUDIT_TRAIL where OBJECT_NAME ='CLASS_INFO3' and 1
(执⾏以上操作后,我得到的结果和以下不同,虽然执⾏了不同的操作,但是审计记录只有select操作)
—结果:
SQL> / EXTENDED_TIMESTAMP SESSION_ID SQL_TEXT
14-8⽉ -12 04.14.45.187000 下午 +08:00 190125 t_test set emp1=‘111’
14-8⽉ -12 04.26.02.968000 下午 +08:00 190125 delete from t_test where rownum=1
以下是我得到的结果:
SQL> select SQL_TEXT from DBA_COMMON_AUDIT_TRAIL where
OBJECT_NAME=‘CLASS_INFO3’ ;
SQL_TEXT
SELECT * FROM CLASS_INFO3
SELECT * FROM CLASS_INFO3
SELECT * FROM CLASS_INFO3
注意:审计⼀般只⽤于对普通⽤户操作,⼀般不审计SYS⽤户
对于windows系统,对sys⽤户的审计信息并不存在AUDIT_FILE_DEST参数指定的⽬录⾥,⽽是在windows的事件管理器中。