`
哇哈哈852
  • 浏览: 87780 次
文章分类
社区版块
存档分类
最新评论

使用触发器和自治事务做了个DDL审计

阅读更多


目的:禁止对ZFPT用户的表执行ALTER TABLE的操作,并审计操作行为。

--创建ZFPTADM用户用于管理触发器

CREATE USER ZFPTADM IDENTIFIED BY ZFPTADMDEFAULT TABLESPACE ZFPT_CDATA TEMPORARY TABLESPACE ZFPT_TEMP;

--授予ZFPTADM用户创建会话、触发器、表、查询字典视图以及不限制空间的权限

GRANT CREATE SESSION,CREATE TRIGGER,CREATETABLE,UNLIMITED TABLESPACE,SELECT ANY DICTIONARY TO ZFPTADM;

--创建审计日志表

DROP TABLE ZFPTADM.ZFPT_DDL_LOGS PURGE;

CREATE TABLE ZFPTADM.ZFPT_DDL_LOGS (

TIMESTAMP VARCHAR2(32),

USERNAME VARCHAR2(32),

OSUSER VARCHAR2(32),

LOGONTIME VARCHAR2(32),

MACHINE VARCHAR2(64),

PROGRAM VARCHAR2(64),

ERRMSG VARCHAR2(4000));



COMMENT ON COLUMNZFPTADM.ZFPT_DDL_LOGS.TIMESTAMP IS '操作时间';

COMMENT ON COLUMNZFPTADM.ZFPT_DDL_LOGS.USERNAME IS '使用的DB用户';

COMMENT ON COLUMN ZFPTADM.ZFPT_DDL_LOGS.OSUSERIS '使用的OS用户';

COMMENT ON COLUMNZFPTADM.ZFPT_DDL_LOGS.LOGONTIME IS '回话登陆时间';

COMMENT ON COLUMNZFPTADM.ZFPT_DDL_LOGS.MACHINE IS '客户端';

COMMENT ON COLUMNZFPTADM.ZFPT_DDL_LOGS.PROGRAM IS '使用的工具';

COMMENT ON COLUMNZFPTADM.ZFPT_DDL_LOGS.ERRMSG IS '组装信息';

--创建触发器

CREATE OR REPLACE TRIGGERZFPTADM.ZFPTDDLMONITOR

BEFORE ALTER ON ZFPT.SCHEMA

DECLARE

PRAGMA AUTONOMOUS_TRANSACTION;

V_TIMESTAMP VARCHAR2(32);

V_USERNAME VARCHAR2(32);

V_OSUSER VARCHAR2(32);

V_LOGONTIME VARCHAR2(32);

V_MACHINE VARCHAR2(64);

V_PROGRAM VARCHAR2(64);

V_ERRMSG VARCHAR2(4000);



BEGIN

         --判断所操作的对象类型是否为TABLE类型,只有TABLE类型才需要审计和禁止,其他类型以来方行

         IF(ORA_DICT_OBJ_TYPE='TABLE')

         THEN

                   SELECTUSERNAME,MACHINE,OSUSER,PROGRAM,TO_CHAR(LOGON_TIME,'YYYY-MM-DD HH24:MI:SS'),TO_CHAR(SYSTIMESTAMP,'YYYY-MM-DD HH24:MI:SS')

                   INTOV_USERNAME,V_MACHINE,V_OSUSER,V_PROGRAM,V_LOGONTIME ,V_TIMESTAMP

                   FROMV$SESSION WHERE SID=(SELECT USERENV('SID') FROM DUAL);

                   V_ERRMSG:= '来自客户端【'||V_MACHINE||'】的OS用户【'||V_OSUSER||'】使用【'||V_PROGRAM||'】程序以DB用户【'||V_USERNAME||'】连接,对【'||ORA_DICT_OBJ_OWNER|| '.' || ORA_DICT_OBJ_NAME || ' 】对象执行了【'||ORA_SYSEVENT||'】操作!';

                   INSERTINTO  ZFPTADM.ZFPT_DDL_LOGS(TIMESTAMP,USERNAME,OSUSER,LOGONTIME,MACHINE,PROGRAM,ERRMSG)

                   VALUES(V_TIMESTAMP,V_USERNAME,V_OSUSER,V_LOGONTIME,V_MACHINE,V_PROGRAM,V_ERRMSG);

                   COMMIT;

                   RAISE_APPLICATION_ERROR(-20001,'注意:客户端【'||V_MACHINE||'】,OS用户为【'||V_OSUSER||'】,DB用户为【'||V_USERNAME||'】,你无权对【'||ORA_DICT_OBJ_OWNER || '.' || ORA_DICT_OBJ_NAME || ' 】对象执行【'||ORA_SYSEVENT||'】操作,已记录你的违规操作行为!');

         ENDIF;

END ;

/

--启用触发器就会继续审计,不能执行ALTER操作

ALTER TRIGGER ZFPTADM.ZFPTDDLMONITORENABLE;

--禁用触发器就会停止审计,可以执行ALERT操作

ALTER TRIGGER ZFPTADM.ZFPTDDLMONITORDISABLE;
  • 大小: 51.6 KB
分享到:
评论

相关推荐

    一个DDL触发器例子(阻止DDL并记警告日志)

    有时我们需要控制用户对表执行DDL操作,包括truncate等操作。为了达到灵活控制的目的,我们使用了DDL trigger

    oracle安全审计之登录登出、ddl操作记录触发器

    oracle的登录、登出触发器(时间、来访ip、用户信息、sid等等),ddl操作记录触发器(含create、drop、alter、truncate等),都属于事后触发,不影响业务操作

    sql 触发器 详解与实例

    触发器对表进行插入、更新、删除的时候会自动执行的特殊...SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。

    Oracle中通过触发器来追踪用户的活动

    从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括数据库启动触发器,DDL触发器和最终用户登陆/注销触发器。...

    了解SQLServer触发器及触发器中的事务

    在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两种触发器类型(DML触发器&DDL触发器)和After触发器&InsteadOf触发器的应用不同,开始说起它们,然后是说与事务有关的故事。如果,你有什么建议和...

    Oracle中通过触发器监视系统使用情况

    从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括数据库启动触发器,DDL触发器和最终用户登陆/注销触发器。...

    SQL Server触发器及触发器中的事务学习

    如果你有对触发器和事务的概念,有些了解,这篇文章,对你来说会是很简单,或能让你更进一步的了解触发器里面的一些故事,和触发器中事务个故事。在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两...

    SQL Server 2008中的代码安全(二) DDL触发器与登录触发器

    MicrosoftSQL Server 提供两种主要机制来强制使用业务规则和数据完整性:约束和触发器。触发器为特殊类型的存储过程,可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和...

    登录审计,login审计触发器.zip

    oracle登录审计,ddl审计,登录用户名,OSuser,machine,ddl审计

    sqlserver 触发器学习(实现自动编号)

    总结常用基本点如下: 1、触发器有两种类型:数据定义语言触发器(DDL触发器)和数据操纵语言触发器(DML触发器)。 DDL触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP或相似的语句)对数据库结构进行...

    Oraclet中的触发器

     触发器本身:即该TRIGGER 被触发之后的目的和意图,正是触发器本身要做的事情。 例如:PL/SQL 块。  触发频率:说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。语句级...

    第9章 触发器.ppt

    重点之中点 9.1 触发器的种类和触发事件 9.2 DML触发器 9.3 数据库事件触发器 9.4 DDL事件触发器 9.5 替代触发器 9.6 查看触发器

    oracle 触发器 必懂

    第 9 章 触发器 9.1 触发器的种类和触发事件 9.2 DML 触发器 9.3 数据库事件触发器 9.4 DDL事件触发器 9.5 替代触发器 9.6 查看触发器 9.7 阶段训练 9.8 练习

    实验六-触发器实验报告.doc

    不允许 DDL 声明和事务控制语句 。 如果由触发器调用存储子过程,则存储子程序不能包括事务控制语句 。 :old 和 :new 值的类型不能是 LONG 和 LONG RAW。 [实验内容] 1. 给Customer表增加一列Savings,类型为int,来...

    mysql触发器详解!!!

    部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。 优点: 触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK...

    DDL_Trigger.sql

    一般开发人员对于DDL触发器比较陌生, 那没这篇文章会给你详细的讲解DDL触发器,然你深入了解DDL触发器

    SQL Server误区30日谈 第4天 DDL触发器就是INSTEAD OF触发器

     DDL触发器的实现原理其实就是一个AFTER触发器。这个意思是先发生DDL操作,然后触发器再捕捉操作(当然如果你在触发器内写了Rollback,则也可能回滚)。  存在Rollback也意味着这个触发器并不像你想象的那么轻量,...

    SQLServer2008数据库基础入门教程含思考题练习题 第11章 存储过程 触发器和函数 共62页.ppt

    【概述】 如何提高Transact-SQL语句的执行...DDL触发器的特点和创建方式 用户定义函数的类型和特点 使用CREATE FUNCTION语句创建用户定义函数 【内容】 11.1 存储过程 11.2 触发器 11.3 用户定义函数 11.4 本章小结

    浅析SQL Server2005中的DDL触发器技术.pdf

    浅析SQL Server2005中的DDL触发器技术.pdf

Global site tag (gtag.js) - Google Analytics