如果要审计数据库中的ddl操作,那么可以通过ddl触发器来实现,本节介绍一个例子,把数据库中的所有ddl操作都记录下来。本例子可以
如果要审计数据库中的ddl操作,那么可以通过ddl触发器来实现,本节介绍一个例子,把数据库中的所有ddl操作都记录下来。本例子可以在oracle 8i或更高的版本中使用。
第一步,创建表空间和相关的日志表:
create tablespace statlog datafile '/oradata/statlog.dbf' size 200m;
create table stat$log_ddl
(
ddl_date date,
user_name varchar2(30),
ip_addr varchar2(30),
obj_name varchar2(50),
ddl_type varchar2(30),
object_type varchar2(18),
owner varchar2(30),
sql_text varchar2(1000)
) tablespace statlog;
第二步,创建数据库级的ddl触发器,把所有的ddl操作都记录下来
create or replace trigger ddl_audit after create or alter or drop or truncate or
grant or revoke or rename
on database
declare
ipaddr varchar2(20);
stext varchar2(1000);
begin
begin
select sys_context('userenv', 'ip_address') into ipaddr from dual;
exception when others then
ipaddr:='-';
end;
begin
select sql_text into stext from v$open_cursor where upper(sql_text) like 'alter%';
exception when others then
stext:='-';
end;
insert into sys.stat$log_ddl values
(sysdate,
user,
nvl (ipaddr,'-'),
nvl(ora_dict_obj_name,'-'),
nvl(ora_sysevent,'-'),
nvl(ora_dict_obj_type,'-'),
nvl(ora_dict_obj_owner,'-'),
stext
);
exception when others then
null;
end;
/
,
