IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Oracle中审计删除(DELETE)操作的触发器

Oracle Life 2011-01-11 22:38:12 累计浏览 3,086 次
本机暂存
    帮朋友写的一个简单审计删除操作的触发器,供参考。

    首先是授权:

    SQL> connect / as sysdba

    Connected.

    SQL> grant select on v_$sql to eygle;

    Grant succeeded.

    SQL> grant select on v_$session to eygle;

    Grant succeeded.

    创建测试表及审计表:

    SQL> connect eygle/eygle

    Connected.

    SQL> create table eygle as select user_id,username from dba_users;

    Table created.

    SQL> desc eygle

    Name                                      Null?    Type

    ----------------------------------------- -------- ----------------------------

    USER_ID                                   NOT NULL NUMBER

    USERNAME                                  NOT NULL VARCHAR2(30)

    SQL> create table eygle_delete_audit

     2  (user_id number,username varchar2(30),deleteby varchar2(30),deldate date,ipaddress varchar2(50),sqltext clob);

    Table created.

    创建如下触发器:

    CREATE OR REPLACE TRIGGER eygle_after_delete

     AFTER DELETE

     ON eygle

     FOR EACH ROW

    BEGIN

    INSERT INTO eygle_delete_audit

    SELECT :old.user_id,:old.username,user,sysdate,SYS_CONTEXT (\'userenv\', \'ip_address\')

    ,q.sql_text

    FROM v$sql q, v$session s

    WHERE s.audsid = (SELECT USERENV (\'SESSIONID\') FROM DUAL)

    AND s.sql_id = q.sql_id;

    END;

    /

    测试删除操作:

    SQL> connect eygle/eygle@rac1

    Connected.

    SQL> delete from eygle where user_id=46;

    1 row deleted.

    SQL> commit;

    Commit complete.

    SQL> truncate table eygle_delete_audit;

    Table truncated.

    SQL> delete from eygle where user_id=0;

    1 row deleted.

    SQL> commit;

    Commit complete.

    SQL> select * from eygle_delete_audit;

     USER_ID USERNAME                       DELETEBY

    ---------- ------------------------------ ------------------------------

    DELDATE      IPADDRESS

    ------------ --------------------------------------------------

    SQLTEXT

    --------------------------------------------------------------------------------

     0 SYS                            EYGLE

    12-JAN-11    172.16.3.248

    delete from eygle where user_id=0

    能够成功记录删除信息及SQL,不知是否有其他问题,请建议!原图已失效

同分类推荐文章

  1. 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
  2. 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
  3. 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,398)
  2. 如何查找消耗资源较大的SQL (累计阅读 15,210)
  3. Oracle MTS模式下 进程地址与会话信息 (累计阅读 14,408)
  4. 其实,文件也可以truncate (累计阅读 8,574)
  5. MariaDB常见问题FAQ (累计阅读 8,345)
  6. SQL vs NoSQL:数据库并发写入性能比拼 (累计阅读 8,003)
  7. Mysql的随机读取 (累计阅读 7,863)
  8. 索引与优化like查询 (累计阅读 7,337)
  9. 在百度的第一年 (累计阅读 6,922)
  10. 那些在11gR2中可能惹祸的新特性,一张列表帮助你摆脱升级11gR2带来的烦恼 (累计阅读 6,879)