千家信息网

使用Trigger审计一张表的DML操作

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,最近ogg的灾备端复制进程中的一张表老是报错ORA-04031,但是又查不到原因,于是想用审计的方法来看到底这张表是被谁做了DML操作,把数据搞没了。本来想用数据库自带的审计功能参考:http://h
千家信息网最后更新 2025年01月20日使用Trigger审计一张表的DML操作

最近ogg的灾备端复制进程中的一张表老是报错ORA-04031,但是又查不到原因,于是想用审计的方法来看到底这张表是被谁做了DML操作,把数据搞没了。本来想用数据库自带的审计功能参考:http://hbxztc.blog.51cto.com/1587495/1870181

但是需要重启数据库,就放弃了,上网查资料看到有人用触发器来实现这个功能,于是自己也做了尝试。

平台11.2.0.4

sys@ORCL>select * from v$version;BANNER-------------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionPL/SQL Release 11.2.0.4.0 - ProductionCORE    11.2.0.4.0      ProductionTNS for Linux: Version 11.2.0.4.0 - ProductionNLSRTL Version 11.2.0.4.0 - Production

创建测试表Orders

zx@ORCL>create table ORDERS  2  (  3    order_id   NUMBER,  4    order_name VARCHAR2(10)  5  );Table created.

创建用于记录DML操作记录的表

zx@ORCL>create table AUDIT_ORDERS  2  (  3    orderid_new NUMBER(38),    4    orderid_old NUMBER(38),  5    username    VARCHAR2(30),  6    opt_date    DATE,  7    opt_type    VARCHAR2(10),  8    terminal    VARCHAR2(50),  9    session_id  NUMBER(10), 10    hostname    VARCHAR2(50) 11  );Table created.

创建触发器

zx@ORCL>CREATE OR REPLACE TRIGGER TRI_AUDIT_ORDERS  2    BEFORE INSERT OR UPDATE OR DELETE ON ORDERS  3    FOR EACH ROW  4  BEGIN  5    IF INSERTING THEN  6      INSERT INTO AUDIT_ORDERS  7      VALUES  8        (:NEW.ORDER_ID,  9         :OLD.ORDER_ID, 10         USER, 11         SYSDATE,                           --记录操作的时间 12         'INSERT', 13         SYS_CONTEXT('USERENV', 'TERMINAL'),--记录操作来源的终端信息 14         USERENV('SID'),                    --记录操作的SID 15         SYS_CONTEXT('USERENV', 'HOST'));   --记录操作的主机名 16    ELSIF UPDATING THEN 17      INSERT INTO AUDIT_ORDERS 18      VALUES 19        (:NEW.ORDER_ID, 20         :OLD.ORDER_ID, 21         USER, 22         SYSDATE, 23         'UPDATE', 24         SYS_CONTEXT('USERENV', 'TERMINAL'), 25         USERENV('SID'), 26         SYS_CONTEXT('USERENV', 'HOST')); 27    ELSIF DELETING THEN 28      INSERT INTO AUDIT_ORDERS 29      VALUES 30        (:NEW.ORDER_ID, 31         :OLD.ORDER_ID, 32         USER, 33         SYSDATE, 34         'DELETE', 35         SYS_CONTEXT('USERENV', 'TERMINAL'), 36         USERENV('SID'), 37         SYS_CONTEXT('USERENV', 'HOST')); 38    END IF; 39  END; 40  /Trigger created.

测试数据

--linux的sqlplus插入zx@ORCL>insert into orders values(1,'zx');1 row created.zx@ORCL>commit;Commit complete.--windows的sqlplus插入SQL> insert into orders values(2,'wl');已创建 1 行。SQL> commit;提交完成。--plsql插入INSERT INTO orders VALUES(3,'yhz');COMMIT;--使用sys用户插入zx@ORCL>conn / as sysdbaConnected.sys@ORCL>insert into zx.orders values(4,'wj');1 row created.sys@ORCL>commit;Commit complete.--更新数据zx@ORCL>update orders set order_id=10 where order_id=1;1 row updated.zx@ORCL>commit;Commit complete.--删除数据zx@ORCL>delete from orders where order_id<3;1 row deleted.zx@ORCL>commit;Commit complete.

查看记录表中的记录

--测试表记录zx@ORCL>select * from orders;  ORDER_ID ORDER_NAME---------- ------------------------------         3 yhz        10 zx         4 wj--审计表记录SQL> col username for a10SQL> col hostname for a20SQL> alter session set nls_date_format='yyyymmdd hh34:mi:ss';会话已更改。SQL> set linesize 200SQL> select * from audit_orders;ORDERID_NEW ORDERID_OLD USERNAME   OPT_DATE         OPT_TYPE            TERMINAL                               SESSION_ID HOSTNAME----------- ----------- ---------- ----------------- -------------------- ---------------------------------------- ---------- --------------------          3           ZX         20170104 21:32:46 INSERT              VICTOR-PC                                      10 WORKGROUP\VICTOR-PC          1           ZX         20170104 21:30:32 INSERT              pts/0                                     24 rhel6          2           ZX         20170104 21:31:47 INSERT              VICTOR-PC                                     146 WORKGROUP\VICTOR-PC          4           SYS        20170104 21:33:52 INSERT              pts/0                                     24 rhel6         10              1 ZX      20170104 21:37:26 UPDATE              pts/0                                     24 rhel6                      2 ZX      20170104 21:37:50 DELETE              pts/0                                     24 rhel6已选择 6 行。

审计表记录了所有的DML操作,可以用于审计哪些用户对表做了哪些操作。

参考:

http://www.cnblogs.com/wanglibo/articles/2121098.html

http://www.cnblogs.com/huyong/archive/2011/04/27/2030466.html


数据 审计 测试 功能 数据库 用户 触发器 参考 主机 信息 原因 平台 方法 时间 来源 终端 老是 记录表 资料 进程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 验证码图片数据库 软件开发必须学习的知识 软件开发上下游关联行业 计算机网络技术基础简单总结 惠州戴尔服务器服务公司地址 关于加强节假日网络安全工作 怎么查服务器硬盘的mac 水利部网络安全平台 网络安全行业会加班吗 sql数据库备份文件合并 数据库设计存储图片路径 软件开发风险因素 分级保护网络安全域 家用电脑服务器在哪儿 核酸检验管理数据库设计 全球制裁跟踪数据库 南大通用数据库是大数据吗 滁州回收服务器多少钱 数据库配置文件说明 怎么判断服务器是否装了操作系统 服务器传递文件丢包怎么办 重庆软件开发公司哪个好 小学生网络安全作业试题 大兴区管理软件开发质量保障 惠州戴尔服务器服务公司地址 怎么查服务器硬盘的mac 我国网络安全管理规定 立密精讯联滔电子软件开发工程师 学生管理数据库试题 深圳星煜互联网科技
0