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;
***** 请阅读原文: 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 Analyze 命令 详解
- 深入学习Oracle分区表及分区索引
- oracle 学习blogs
- ORACLE 执行计划
- oracle中查找执行效率低下的SQL
- 黑马程序员_Oracle 数据库分页功能原理
- 工作中Oracle常用的SQL
- 从MSSQL转大量数据到ORACLE的解决方案
- oracle查看是否启用归档日志
- oracle sql日期比较
- MySQL与Oracle在SQL语句写法上的一些差异
- oracle参数文件、控制文件、数据文件、日志文件存放位置查看
- ORACLE TO_CHAR函数详解及其他格式转换说明
- Oracle如何实现跨库查询
- Oracle 学习之 性能优化(十二) 分区表
- Oracle第三弹---PL/SQL游标
- 重启oracle数据库
- Oracle_使用bat命令执行sql命令文件
- xmanger安装oracle调图形化界面报错解决方法
- Asp.Net+Oracle+ExtJs