【数据库】通过触发器实现审计日志记录-demo篇
触发器实现审计日志记录(记录增、删、改)
#创建测试表
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
); #变更记录表
CREATE TABLE "public"."company_log" (
"id" int4 NOT NULL,
"name" text COLLATE "default" NOT NULL,
"age" int4 NOT NULL,
"address" char(50) COLLATE "default",
"salary" float4,
"s_id" int8 DEFAULT nextval('company_log_s_id_seq'::regclass) NOT NULL,
CONSTRAINT "company_log_pkey" PRIMARY KEY ("s_id")
)
WITH (OIDS=FALSE)
; ALTER TABLE "public"."company_log" OWNER TO "postgres";
#审计日志表
CREATE TABLE "public"."audit_log" (
"id" int8 DEFAULT nextval('audit_log_id_seq'::regclass) NOT NULL,
"table_name" varchar(255) COLLATE "default",
"operation" varchar(255) COLLATE "default",
"update_time" text COLLATE "default",
"table_id" int8,
CONSTRAINT "audit_log_pkey" PRIMARY KEY ("id")
)
WITH (OIDS=FALSE)
; ALTER TABLE "public"."audit_log" OWNER TO "postgres"; #创建触发器函数
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $example_table$
DECLARE
tid INTEGER;
BEGIN
if (TG_OP='DELETE' OR TG_OP='UPDATE' ) THEN
INSERT INTO company_log (ID,NAME,AGE,ADDRESS,SALARY) VALUES (OLD.id,OLD.name, OLD.age, OLD.address, OLD.salary) RETURNING s_id into tid; ELSEIF (TG_OP='INSERT') THEN
INSERT INTO company_log (ID,NAME,AGE,ADDRESS,SALARY) VALUES (NEW.id,NEW.name, NEW.age, NEW.address, NEW.salary) RETURNING s_id into tid; END IF;
INSERT INTO audit_log(table_name, operation,update_time,table_id) VALUES ('company',TG_OP, current_timestamp,tid);
RETURN NEW; END; $example_table$ LANGUAGE plpgsql; #创建触发器
create trigger company_trigger
after insert or update or delete on company
for each row execute procedure auditlogfunc();
#执行测试
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (11, 'Paul', 32, 'California', 20000.00 );
实现效果
company表

触发更新的company_log表

审计日志表 audit_log

以上周只是简单的实现,比如如何在触发器中拿到登录的用户和ip信息,确定是当前某个用户的操作,这还是一个问题
后续会做更新
【数据库】通过触发器实现审计日志记录-demo篇的更多相关文章
- EF利用重写SaveChanges()方法实现 审计日志记录
先上一段最近项目中的代码,此代码可以放到自己项目中的dbContext中 public override Task<int> SaveChangesAsync() { List<Au ...
- Abp + MongoDb 改造默认的审计日志存储位置
一.背景 在实际项目的开发当中,使用 Abp Zero 自带的审计日志功能写入效率比较低.其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起.所以我们可以重新实现 Abp 的 IAuditi ...
- Kubernetes审计日志方案
前言 当前Kubernetes(K8S)已经成为事实上的容器编排标准,大家关注的重点也不再是最新发布的功能.稳定性提升等,正如Kubernetes项目创始人和维护者谈到,Kubernetes已经不再是 ...
- 最全Kubernetes审计日志方案
前言 当前Kubernetes(K8S)已经成为事实上的容器编排标准,大家关注的重点也不再是最新发布的功能.稳定性提升等,正如Kubernetes项目创始人和维护者谈到,Kubernetes已经不再是 ...
- 机器数据的价值 - Web 访问日志和数据库审计日志
计算机数据 大量的数据流,不断增长的来源,蕴含着巨大的价值 在 Splunk,我们大量谈及计算机数据.这些数据是指在数据中心.“物联网”和互联设备世界中运行的所有系统产生的数据.其中包括支撑组织的应用 ...
- 也用 Log4Net 之将日志记录到数据库的后台实现 (二)
也用 Log4Net 之将日志记录到数据库的后台实现 (二) 大家下午好,昨天讲了配置,今天我们讲讲后台实现,在完成了后台实现后,我们才能真正意义上的解决把自定义属性字段值录入到数据库中. 在开写之 ...
- 也用 Log4Net 之将日志记录到数据库的配置 (一)
也用 Log4Net 之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需 ...
- 扔掉log4j、log4j2,自己动手实现一个多功能日志记录框架,包含文件,数据库日志写入,实测5W+/秒日志文件写入,2W+/秒数据库日志写入,虽然它现在还没有logback那么强大
讲到log4j,现在国外基本是没有开发者用这个框架了,原因大致有几点,1.功能太少:2.效率低下:3.线程锁bug等等等各种莫名其妙的bug一直都没解决. 其实最重要的是log4j的作者自己也放弃了l ...
- Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录
此为在网络上找来的,觉得很好! 实现目的: 对Mongodb数据库日志按天保存,并且只保留最近7天的日志记录. 具体操作: 使用Mongodb数据库自带的命令来切割日志 ps -def | grep ...
随机推荐
- pycharm调用shell命令
在pycharm中调用shell命令 1.调用普通命令 # -*- coding:UTF-8 -*- import subprocess subprocess.call(["ls /home ...
- asp.net下Response.ContentType类型汇总
在ASP.NET中使用Response.ContentType="类型名";来确定输出格式 'ez' => 'application/andrew-inset', 'hqx' ...
- [多转合成] 使用pycaffe保存各个层的特征图
# coding=utf-8 #python2 caffe_visualize.py import numpy as np import matplotlib.pyplot as plt import ...
- P1020 【导弹拦截】
题目连接嘤嘤嘤~~ 这个题目还是比较难的(至少对我来说是酱紫的嘤嘤嘤).. 第一问,看题解好像用的都是DP,但其实可以用二分,求最长不上升子序列,因为只要输出答案,不用输出方案,时间复杂度n leg( ...
- eNSP——配置NAT
原理: 实验案例: 拓扑图: 实验编址: 1.基本配置 根据实验编址进行基本配置,并测试连通性. 2.配置静态NAT 公司在网关路由器R1上配置访问外网的默认路由. 需要在网关路由器R1上配置NAT地 ...
- fastadmin 后台管理 时间戳字段使用
数据库样式 int 11 后台add.html: <div class="form-group"> <label class="control-labe ...
- IO-file-06 文件夹的遍历
/** * 列出下一级 * 1.list(): 列出下级名称 String[] list = dir.list(); * 2.listFiles():列出下级File对象 File[] listF ...
- C++Primer 5th Chap8 The IO Library
IO类: 头文件 类型 iostream istream,从流读取数据 ostream,向流写入数据 iostream,读写流 fstream ifstream,从文件读取数据,默认in模式打开 of ...
- python day1 (afternoon)购物清单
购物清单 #顾客给出余额 #给出商品清单 #顾客挑选商品 #给出购物清单 代码: #!/usr/bin/env python#-*- coding:utf-8 -*- salary = int(inp ...
- image analogies笔记
Image Analogies 个人学习笔记, 根基尚浅, 免不得颇多纰漏, 望批评指教. 这是一篇2001年的文章, 其核心主要讲了如何将一对图片之间的"转换模式"应用到其他图片 ...