目的:禁止对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
分享到:
相关推荐
通过使用这些触发器,数据库管理员可以创建一个全面的审计日志,以满足法规遵从性和内部审计需求。同时,由于这些触发器是在操作后触发的,它们不会对正常的业务操作造成性能影响。 在实际应用中,应根据具体的审计...
Oracle 9i之后引入了Fine-Grained Audit (FGA),这是一个更为先进的审计机制,提供了更精细的控制和过滤选项,可以在不使用触发器的情况下实现部分审计需求。然而,在Oracle 8i/9i版本中,触发器仍然是实现细粒度...
有时我们需要控制用户对表执行DDL操作,包括truncate等操作。为了达到灵活控制的目的,我们使用了DDL trigger
"数据库触发器的创建和使用" 数据库触发器是数据库管理系统中的一种特殊类型的存储过程,它可以自动执行某些操作来确保数据的完整性和一致性。本章节将详细介绍触发器的概念、功能、优点、类型,以及如何创建和使用...
"登录审计"和"DDL审计"是数据库审计的两个关键方面。本文将深入探讨这两个概念,以及如何在Oracle环境中设置和利用它们。 首先,让我们关注"登录审计"。登录审计涉及到记录用户尝试访问数据库时的所有登录尝试,...
假设我们需要创建一个审计触发器,用于记录所有DDL操作,以及操作者的IP地址和用户名。可以采用如下步骤实现: 1. **创建审计日志表**:首先创建一个表用于存储审计记录。 ```sql CREATE TABLE audit_log ( ...
DDL触发器可以通过`eventdata()`函数获取与触发事件相关的XML数据,增强了数据库审计和控制的能力。 总的来说,这个实验旨在让学生掌握触发器的创建和使用,理解数据完整性的概念,以及如何通过触发器来维护这种...
- **隔离性**:并发执行的事务不会干扰彼此,每个事务看起来像是系统中唯一运行的事务。 - **持久性**:一旦事务完成,即提交,它对数据库所做的更改是永久的。 #### 三、锁定机制与死锁 锁定机制通过在事务需要...
"oracle触发器的种类和触发事件" Oracle触发器是一种特殊的存储过程,它可以在数据库中自动执行一些操作,主要用于实现数据的...只有正确地创建和使用触发器,才能真正发挥触发器的作用,提高数据库的安全性和可靠性。
例如,如果在一个事务中进行多行更改,触发器可以确保所有更改要么全部成功,要么全部回滚,以保持数据的一致性。 总的来说,理解SQL Server中的触发器和事务对于数据库管理员和开发人员来说至关重要,它们是实现...
2. 类型:DML触发器(用于响应INSERT、UPDATE和DELETE操作)和DDL触发器(用于响应创建、修改或删除数据库对象的语句)。 3. 应用场景:如审计跟踪、级联删除、数据验证等。 4. 注意事项:过度使用触发器可能导致...
触发器分为三种主要类型:DML触发器(Data Manipulation Language)、DDL触发器(Data Definition Language)和Logon触发器。DML触发器针对INSERT、UPDATE和DELETE操作,而DDL触发器则响应CREATE、ALTER、DROP等...
在这个案例中,我们可以使用触发器来实现订单表和库存表的级联更新。当买家购买了某商品后,触发器可以自动更新库存表中的库存数量,从而实现数据的级联更新。 使用SQL Server触发器可以实现数据库的级联更新,提高...
这个触发器主要目的是为了系统安全和审计目的。 首先,为了创建这个触发器,我们需要授予用户一定的权限。在给出的例子中,用户`alibaba`被授予了查询`V_$SESSION`视图和执行`DBMS_SYSTEM`包中的`KSDWRT`过程的权限...
例如,一个AFTER UPDATE触发器可以在数据更新后记录日志,用于跟踪和审计。 创建DML触发器时,需要指定触发事件,如: ```sql CREATE TRIGGER trigger_name BEFORE|AFTER {INSERT|UPDATE|DELETE} [OF column [,...]...
【触发器概述】 触发器是数据库管理系统中一种特殊类型的存储过程,它会在特定的数据库语言事件发生时自动执行。...但需要注意的是,过度使用触发器可能会导致性能下降,因此应谨慎设计和使用触发器。