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

使用触发器和自治事务做了个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
分享到:
评论

相关推荐

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

    通过使用这些触发器,数据库管理员可以创建一个全面的审计日志,以满足法规遵从性和内部审计需求。同时,由于这些触发器是在操作后触发的,它们不会对正常的业务操作造成性能影响。 在实际应用中,应根据具体的审计...

    oracle触发器实现审计功能

    Oracle 9i之后引入了Fine-Grained Audit (FGA),这是一个更为先进的审计机制,提供了更精细的控制和过滤选项,可以在不使用触发器的情况下实现部分审计需求。然而,在Oracle 8i/9i版本中,触发器仍然是实现细粒度...

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

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

    数据库的触发器的创建和使用

    "数据库触发器的创建和使用" 数据库触发器是数据库管理系统中的一种特殊类型的存储过程,它可以自动执行某些操作来确保数据的完整性和一致性。本章节将详细介绍触发器的概念、功能、优点、类型,以及如何创建和使用...

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

    "登录审计"和"DDL审计"是数据库审计的两个关键方面。本文将深入探讨这两个概念,以及如何在Oracle环境中设置和利用它们。 首先,让我们关注"登录审计"。登录审计涉及到记录用户尝试访问数据库时的所有登录尝试,...

    Oracle基于系统级触发器的审计功能

    假设我们需要创建一个审计触发器,用于记录所有DDL操作,以及操作者的IP地址和用户名。可以采用如下步骤实现: 1. **创建审计日志表**:首先创建一个表用于存储审计记录。 ```sql CREATE TABLE audit_log ( ...

    数据库的触发器实验报告书

    DDL触发器可以通过`eventdata()`函数获取与触发事件相关的XML数据,增强了数据库审计和控制的能力。 总的来说,这个实验旨在让学生掌握触发器的创建和使用,理解数据完整性的概念,以及如何通过触发器来维护这种...

    事务与锁定的问题 自治事务

    - **隔离性**:并发执行的事务不会干扰彼此,每个事务看起来像是系统中唯一运行的事务。 - **持久性**:一旦事务完成,即提交,它对数据库所做的更改是永久的。 #### 三、锁定机制与死锁 锁定机制通过在事务需要...

    oracle_触发器的种类和触发事件

    "oracle触发器的种类和触发事件" Oracle触发器是一种特殊的存储过程,它可以在数据库中自动执行一些操作,主要用于实现数据的...只有正确地创建和使用触发器,才能真正发挥触发器的作用,提高数据库的安全性和可靠性。

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

    例如,如果在一个事务中进行多行更改,触发器可以确保所有更改要么全部成功,要么全部回滚,以保持数据的一致性。 总的来说,理解SQL Server中的触发器和事务对于数据库管理员和开发人员来说至关重要,它们是实现...

    SQL Server 2005编程入门经典-触发器和存储过程教程

    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触发器实现数据表的级联更新.pdf

    在这个案例中,我们可以使用触发器来实现订单表和库存表的级联更新。当买家购买了某商品后,触发器可以自动更新库存表中的库存数量,从而实现数据的级联更新。 使用SQL Server触发器可以实现数据库的级联更新,提高...

    oracle创建触发器实例

    这个触发器主要目的是为了系统安全和审计目的。 首先,为了创建这个触发器,我们需要授予用户一定的权限。在给出的例子中,用户`alibaba`被授予了查询`V_$SESSION`视图和执行`DBMS_SYSTEM`包中的`KSDWRT`过程的权限...

    Oracle之各类触发器的创建和使用.pdf

    例如,一个AFTER UPDATE触发器可以在数据更新后记录日志,用于跟踪和审计。 创建DML触发器时,需要指定触发事件,如: ```sql CREATE TRIGGER trigger_name BEFORE|AFTER {INSERT|UPDATE|DELETE} [OF column [,...]...

    数据库之 触发器的操作与管理

    【触发器概述】 触发器是数据库管理系统中一种特殊类型的存储过程,它会在特定的数据库语言事件发生时自动执行。...但需要注意的是,过度使用触发器可能会导致性能下降,因此应谨慎设计和使用触发器。

Global site tag (gtag.js) - Google Analytics