返回顶部
首页 > 资讯 > 数据库 >使用Trigger审计一张表的DML操作
  • 317
分享到

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

2024-04-02 19:04:59 317人浏览 独家记忆
摘要

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

最近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 Production
PL/sql Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for linux: Version 11.2.0.4.0 - Production
NLSRTL 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 sysdba
Connected.
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 a10
SQL> col hostname for a20
SQL> alter session set nls_date_fORMat='yyyymmdd hh34:mi:ss';

会话已更改。

SQL> set linesize 200
SQL> 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


您可能感兴趣的文档:

--结束END--

本文标题: 使用Trigger审计一张表的DML操作

本文链接: https://lsjlt.com/news/51323.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Trigger审计一张表的DML操作
    最近ogg的灾备端复制进程中的一张表老是报错ORA-04031,但是又查不到原因,于是想用审计的方法来看到底这张表是被谁做了DML操作,把数据搞没了。本来想用数据库自带的审计功能参考:http://hbxz...
    99+
    2024-04-02
  • Oracle中开启一张表的审计
    Oracle使用audit_trail参数控制审计是否启用audit_trail的参数有下面几种:NONE:不开启审计OS:说明审计信息放在系统汇总,如果是Linux那么由audit_file_dest决定...
    99+
    2024-04-02
  • MySQL数据操作-DML语句的使用
    说明 DML(Data Manipulation Language)数据操作语言,是指对数据库进行增删改的操作指令,主要有INSERT、UPDATE、DELETE三种,代表插入、更新与删除,这是学习MySQL...
    99+
    2022-05-14
    MySQL dml语句 mysql 数据操作
  • oracle 11gR2启用对sys用户操作行为的审计
    在oracle 11gR2中,缺省在audit_file_dest目录会记录sys用户的登录审计信息,但并不会审计操作内容。启用对sys用户操作行为的审计SQL> alter system set a...
    99+
    2024-04-02
  • Oracle开启审计,记录登录用户的所有操作
    1、以DBA登录Oracle   # su - oracle $ sqlplus /nolog SQL> conn / as sysdba   2、查看当前审计设置 ...
    99+
    2024-04-02
  • 如何使用MySQL构建一个可追溯的会计系统表结构以满足审计要求?
    如何使用MySQL构建一个可追溯的会计系统表结构以满足审计要求?在现代商业运作中,会计系统扮演着至关重要的角色。随着商业交易的增加,会计记录和审计要求也变得越来越复杂。在这样的情况下,建立一个可追溯的、灵活的会计系统表结构是至关重要的。本文...
    99+
    2023-10-31
    MySQL 审计 表结构 追溯 会计系统
  • C++中使用哈希表(unordered_map)的一些常用操作方法
    目录1.建立基本数据类型的哈希表2.向哈希表中添加元素1).insert 函数2).用数组方法直接添加3.成员函数begin(),end()函数find()查找函数count() 查...
    99+
    2024-04-02
  • 使用java怎么实现一个mysql分表操作
    使用java怎么实现一个mysql分表操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。设置项目气动执行次方法(每天检查一次表记录)public cl...
    99+
    2023-06-06
  • 使用Mybatis注解怎么实现一个单表、多表操作
    本篇文章给大家分享的是有关使用Mybatis注解怎么实现一个单表、多表操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一.Mybatis注解开发单表操作 ***1.1 MyB...
    99+
    2023-06-06
  • 使用SQL语句将数据库中的两个表合并成一张表
    select * into 新表名 from (select * from T1 union all select * from T2)&nb...
    99+
    2024-04-02
  • Java灵活使用枚举表示一组字符串的操作
    Java枚举表示一组字符串 public class HelloWorld { public static void main(String []args) { ...
    99+
    2024-04-02
  • 使用python处理一万份word表格简历操作
    前言 有一天朋友A向我抱怨,他的老板要求他把几百份word填好的word表格简历信息整理到excel中,看着他一个个将姓名,年龄……从word表格里复制粘贴到excel里,边粘贴心里...
    99+
    2024-04-02
  • PHP使用PhpSpreadsheet库的操作Excel表格
    一、PhpSpreadsheet 介绍 PhpSpreadsheet是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式 PhpSpreadsheet提供了丰富的API接口...
    99+
    2023-10-01
    php excel
  • flutter操作excel表的库使用方法
    推荐库 spreadsheet_decoderexcel 方案一:spreadsheet_decoder 加入依赖 dependencies: flutter: sdk: flutter spreadsheet_decoder: ...
    99+
    2023-08-17
    flutter excel
  • 如何使用Shell小脚本精准统计Mysql每张表的行数
    这篇文章主要介绍了如何使用Shell小脚本精准统计Mysql每张表的行数,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。循环获取数据库名直接上Shell代码,show data...
    99+
    2023-06-09
  • 操作更新Excel工作表时,必须使用一个可更新的查询
    查询是一种用于从数据库中检索数据的技术,而Excel工作表并不是数据库。因此,不需要使用可更新的查询来更新Excel工作表。相反,您...
    99+
    2023-09-26
    Excel
  • 怎么使用JavaScript实现链表的操作
    本篇内容介绍了“怎么使用JavaScript实现链表的操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!链...
    99+
    2024-04-02
  • 如何使用python修改excel表某一列内容的操作方法
    这篇文章主要介绍了如何使用python修改excel表某一列内容的操作方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。想想你在一家公司里做表格,现在有一个下面这样的exce...
    99+
    2023-06-15
  • 如何使用Java实现顺序表的操作
    小编给大家分享一下如何使用Java实现顺序表的操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟...
    99+
    2023-06-28
  • 使用Python的map()函数进行列表操作
    使用Python的map()函数进行列表操作Python提供了许多内置函数,其中一个非常有用的函数是map()函数。map()函数可以用于在列表中的每个元素上应用一个函数,返回一个新的列表。利用map()函数,我们可以快速、简洁地对列表进行...
    99+
    2023-11-18
    Python map() 列表操作
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作