oracle:通过触发器实现对数据库对象增删改动作的审计

************************************************************************
***** 请阅读原文: blog.csdn.net/clark_xu  
***** 欢迎关注微信公众号:clark_blog
************************************************************************

 

 首先,需要创建表来存放数据库对象(表,同义词,包,存储过程,函数,索引等)的增删更新日志。字段包括:对象类型,对象名称,所属用户,事件时间,状态等。

建表语句为:

 -- 创建表CREATE TABLE
create table ETL_OBJECTS_CHANGED
(
  owner       VARCHAR2(30 CHAR) not null,
  object_type VARCHAR2(30 CHAR) not null,
  object_name VARCHAR2(50 CHAR) not null,
  created     VARCHAR2(30),             
  last_ddl    VARCHAR2(30),              
  status      VARCHAR2(30 CHAR)          
)
tablespace TS_LDM_DATA;
comment on table ETL_OBJECTS_CHANGED is '数据库更改对象清单';
comment on column ETL_OBJECTS_CHANGED.owner is '用户名';
comment on column ETL_OBJECTS_CHANGED.created is '创建时间';
comment on column ETL_OBJECTS_CHANGED.last_ddl is '最新ddl时间';
comment on column ETL_OBJECTS_CHANGED.status is 'DDL事件(create or drop)';

 

第二步,创建DDL触发器来监控(注,需要给用户赋予drirectory admin trigger的权限),通过读取DDL触发器的属性值,获得对象的类型,名称,事件等。创建触发器的语句为;

​create or replace trigger tri_objects
after create or drop on  database--schema
BEGIN
    INSERT INTO ETL_OBJECTS_CHANGED
      (OWNER, OBJECT_TYPE, OBJECT_NAME, CREATED, LAST_DDL,status)
    select sys.login_user,sys.dictionary_obj_type,sys.dictionary_obj_name,to_char(sysdate,'yyyymmdd hh24miss'),
    to_char(sysdate,'yyyymmdd hh24miss'),ORA_SYSEVENT
    from dual;     
END;

你可能感兴趣的:(oracle:通过触发器实现对数据库对象增删改动作的审计)