ORACLE DDL TRIGGER

—创建日志表

CREATE TABLE "SYS"."DDL_AUDIT_LOG" 
   (	"DDL_DATE" DATE, 
	"USER_NAME" VARCHAR2(30), 
	"IP_ADDR" VARCHAR2(30), 
	"OBJ_NAME" VARCHAR2(50), 
	"DDL_TYPE" VARCHAR2(30), 
	"OBJECT_TYPE" VARCHAR2(18), 
	"OWNER" VARCHAR2(30), 
	"SQL_TEXT" VARCHAR2(4000 CHAR)
   ) ;

—创建触发器

CREATE OR REPLACE TRIGGER SYS.DDL_AUDIT
   AFTER CREATE OR ALTER OR DROP OR TRUNCATE OR GRANT OR REVOKE OR RENAME
   ON DATABASE
DECLARE
   ipaddr   VARCHAR2 (20);
   STEXT    VARCHAR2 (2000);
BEGIN
   BEGIN
      SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS') INTO ipaddr FROM DUAL;
   EXCEPTION
      WHEN OTHERS
      THEN
         ipaddr := '-';
   END;

   BEGIN
      SELECT SQL_TEXT
        INTO STEXT
        FROM v$open_cursor
       WHERE    UPPER (sql_text) LIKE 'ALTER%'
             OR UPPER (sql_text) LIKE 'DROP%'
             OR UPPER (sql_text) LIKE 'TRUNCATE%'
             OR UPPER (sql_text) LIKE 'GRANT%'
             OR UPPER (sql_text) LIKE 'REVOKE%';
   EXCEPTION
      WHEN OTHERS
      THEN
         STEXT := '-';
   END;

   INSERT INTO SYS.DDL_AUDIT_LOG
       VALUES (SYSDATE,
               USER,
               NVL (ipaddr, '-'),
               NVL (ora_dict_obj_name, '-'),
               NVL (ORA_SYSEVENT, '-'),
               NVL (ora_dict_obj_type, '-'),
               NVL (ora_dict_obj_owner, '-'),
               STEXT);
EXCEPTION
   WHEN OTHERS
   THEN
      NULL;
END;
/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值