您的位置:首页 > 数据库 > Oracle

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

2015-09-10 00:49 567 查看
************************************************************************
***** 请阅读原文: 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: