Oracle 10g审计(audit)实验(六)

2014-11-24 14:07:25 · 作者: · 浏览: 13
00:57 UPDATE EMP1 SET SAL=8000 WHERE DEPTNO=20
----------删除精细审计结果
SQL> DELETE FROM SYS.FGA_LOG$;
4 ROWS DELETED.
SQL> COMMIT;
COMMIT COMPLETE.
FGA 的指导原则
要对所有语句进行审计,可以使用 NULL 条件
POLICY_NAME 必须唯一
在创建 POLICY 时,被审计的表或视图必须已经存在
如果审计条件语法无效,则在访问被审计的对象时会报 ORA-28112 错误。
如果被审计的列在表中不存在,则不会对任何行进行审计。
如果 EVENT HANDLER 不存在,则不会返回任何错误,仍然会创建审计记录。
DBA 审计
具有 SYSDBA 或 SYSOPER 的用户
具有在 数据库处于 CLOSED 状态时可以创建 CONNECTION 的权限
audit trail 必须存储在数据库外部
始终对以 sysdba 或 sysoper 身份创建的 connection 进行的审计
可以使用 audit_sys_operations 参数对 sysdba 或 sysoper 进行额外的审计
使用 audit_file_dest 参数指定 audit trail 的位置
获取审计信息
all_def_audit_opts
dba_stmt_audit_opts
dba_priv_audit_opts
dba_obj_audit_opts
获取审计记录信息
dba_audit_trail
dba_audit_exists
dba_audit_object
dba_audit_session
dba_audit_statement
应用审计(通过触发器实现)
用于记载DML操作所引起的数据变化
---------创建审计表
SQL> conn scott/tiger
Connected.
11:59:23 SQL> create table audit_emp_change(
11:59:34 2 name varchar2(10),
11:59:45 3 oldsal number(6,2),
11:59:53 4 newsal number(6,2),
12:00:02 5 time date);
Table created.
Elapsed: 00:00:00.11
---------创建 DML 触发器
12:00:06 SQL> create or replace trigger tr_sal_change
after update of sal on scott.emp
for each row
declare
v_temp int;
begin
select count(*) into v_temp from audit_emp_change
where name=:old.ename;
if v_temp=0 then
insert into audit_emp_change
values(:old.ename,:old.sal,:new.sal,sysdate);
else
update audit_emp_change
set oldsal=:old.sal,newsal=:new.sal,time=sysdate
where name=:old.ename;
end if;
end;
/
www.2cto.com
----------执行 DML 操作
12:05:58 SQL> update scott.emp set sal=6000 where empno=7788;
1 row updated.
Elapsed: 00:00:00.08
12:07:31 SQL> commit;
Commit complete.
查看审计结果
12:09:15 SQL> select * from audit_emp_change;
NAME OLDSAL NEWSAL TIME
------------------------------ ---------- ---------- -------------------
SCOTT 3000 6000 2012-09-15 12:07:31
Elapsed: 00:00:00.02
12:09:42 SQL> update scott.emp set sal=7000 where empno=7788;
来源 http://blog.csdn.net/xiangsir/article/details/8623350