使用Trigger审计一张表的DML操作
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,最近ogg的灾备端复制进程中的一张表老是报错ORA-04031,但是又查不到原因,于是想用审计的方法来看到底这张表是被谁做了DML操作,把数据搞没了。本来想用数据库自带的审计功能参考:http://h
千家信息网最后更新 2024年11月11日使用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安全错误
数据库的锁怎样保障安全
数据库租车
网评 构建网络安全的作用
游戏服务器端口可以装几个
网络安全宣传周知识锦囊
网络安全教育每课三分钟教案
软件开发师要会什么
电脑应用包括软件开发吗
独立院校网络安全专业
应用数据库服务器技术
荔湾区正规网络技术开发公司
得一等奖的网络安全手抄报
软件测试需要的数据库知识
网络安全主题班会的反思
数据库系统开启安全审计功能
教育网络安全宣传标语
数据库管理系统设计
深圳易方的网络技术公司
文化治理大数据库
网络安全行业全景
wlan网络技术
如何选择软件开发编程语言
网络安全宣传 大学生
方舟私服服务器怎么拿管理
网络安全中肉鸡的含义
北京猿马网络技术有限公司
宝安高效网络安全建设
创造与魔法服务器最少的人
谁可以查询腾讯数据库
index数据库用法
软件开发周期怎么计算