目的:禁止对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操作,包括truncate等操作。为了达到灵活控制的目的,我们使用了DDL trigger
oracle的登录、登出触发器(时间、来访ip、用户信息、sid等等),ddl操作记录触发器(含create、drop、alter、truncate等),都属于事后触发,不影响业务操作
触发器对表进行插入、更新、删除的时候会自动执行的特殊...SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语言语句而激发,这些语句有create、alter、drop语句。
从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括数据库启动触发器,DDL触发器和最终用户登陆/注销触发器。...
在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两种触发器类型(DML触发器&DDL触发器)和After触发器&InsteadOf触发器的应用不同,开始说起它们,然后是说与事务有关的故事。如果,你有什么建议和...
从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括数据库启动触发器,DDL触发器和最终用户登陆/注销触发器。...
如果你有对触发器和事务的概念,有些了解,这篇文章,对你来说会是很简单,或能让你更进一步的了解触发器里面的一些故事,和触发器中事务个故事。在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两...
MicrosoftSQL Server 提供两种主要机制来强制使用业务规则和数据完整性:约束和触发器。触发器为特殊类型的存储过程,可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和...
oracle登录审计,ddl审计,登录用户名,OSuser,machine,ddl审计
总结常用基本点如下: 1、触发器有两种类型:数据定义语言触发器(DDL触发器)和数据操纵语言触发器(DML触发器)。 DDL触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP或相似的语句)对数据库结构进行...
触发器本身:即该TRIGGER 被触发之后的目的和意图,正是触发器本身要做的事情。 例如:PL/SQL 块。 触发频率:说明触发器内定义的动作被执行的次数。即语句级(STATEMENT)触发器和行级(ROW)触发器。语句级...
重点之中点 9.1 触发器的种类和触发事件 9.2 DML触发器 9.3 数据库事件触发器 9.4 DDL事件触发器 9.5 替代触发器 9.6 查看触发器
第 9 章 触发器 9.1 触发器的种类和触发事件 9.2 DML 触发器 9.3 数据库事件触发器 9.4 DDL事件触发器 9.5 替代触发器 9.6 查看触发器 9.7 阶段训练 9.8 练习
不允许 DDL 声明和事务控制语句 。 如果由触发器调用存储子过程,则存储子程序不能包括事务控制语句 。 :old 和 :new 值的类型不能是 LONG 和 LONG RAW。 [实验内容] 1. 给Customer表增加一列Savings,类型为int,来...
部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。 优点: 触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比CHECK...
一般开发人员对于DDL触发器比较陌生, 那没这篇文章会给你详细的讲解DDL触发器,然你深入了解DDL触发器
DDL触发器的实现原理其实就是一个AFTER触发器。这个意思是先发生DDL操作,然后触发器再捕捉操作(当然如果你在触发器内写了Rollback,则也可能回滚)。 存在Rollback也意味着这个触发器并不像你想象的那么轻量,...
【概述】 如何提高Transact-SQL语句的执行...DDL触发器的特点和创建方式 用户定义函数的类型和特点 使用CREATE FUNCTION语句创建用户定义函数 【内容】 11.1 存储过程 11.2 触发器 11.3 用户定义函数 11.4 本章小结
浅析SQL Server2005中的DDL触发器技术.pdf