audit-trigger深度解析:如何通过触发器记录PostgreSQL表的INSERT/UPDATE/DELETE操作
audit-trigger深度解析如何通过触发器记录PostgreSQL表的INSERT/UPDATE/DELETE操作【免费下载链接】audit-triggerSimple, easily customised trigger-based auditing for PostgreSQL (Postgres). See also pgaudit.项目地址: https://gitcode.com/gh_mirrors/au/audit-triggerPostgreSQL作为企业级数据库数据变更的追踪与审计至关重要。audit-trigger是一款轻量级PostgreSQL审计工具通过数据库触发器机制可自动记录表的INSERT、UPDATE、DELETE和TRUNCATE操作帮助开发者实现数据变更的全流程追踪。本文将从核心功能、安装配置到实际应用全面解析audit-trigger的使用方法。 audit-trigger核心价值为什么需要数据审计在数据库管理中数据变更的可追溯性是保障数据安全的关键。无论是误操作恢复、合规审计还是问题排查都需要准确记录谁用户在何时修改了数据修改前的原始值与修改后的新值触发变更的具体SQL语句audit-trigger通过PostgreSQL的触发器功能在不侵入业务代码的前提下实现对目标表的无感审计。其核心优势在于轻量级设计纯SQL实现无需额外依赖高度可定制支持忽略特定字段、控制日志详细程度完整记录包含用户信息、时间戳、IP地址和SQL语句等关键审计要素 快速上手安装与基础配置一键部署audit-triggeraudit-trigger的安装过程非常简单只需在PostgreSQL数据库中执行项目根目录下的audit.sql脚本-- 克隆项目仓库 git clone https://gitcode.com/gh_mirrors/au/audit-trigger cd audit-trigger -- 连接数据库并执行安装脚本 psql -U your_username -d your_database -f audit.sql执行成功后系统会自动创建audit模式包含审计日志表和核心触发器函数。核心组件解析audit-trigger主要包含以下关键对象定义于audit.sqlaudit.logged_actions表存储所有审计记录包含事件ID、表名、操作类型、变更数据等字段audit.if_modified_func()函数触发器核心逻辑处理数据变更并写入审计日志audit.audit_table()函数便捷启用表审计的包装函数 实战指南启用表审计的3种方式audit-trigger提供了灵活的审计配置方式可根据需求选择不同的审计粒度1. 基础行级审计默认配置对目标表启用完整的行级审计记录所有INSERT/UPDATE/DELETE操作及变更内容-- 对public.users表启用审计 SELECT audit.audit_table(public.users);此命令会自动创建两个触发器audit_trigger_row记录行级变更INSERT/UPDATE/DELETEaudit_trigger_stm记录语句级操作TRUNCATE2. 忽略特定字段的审计如果某些敏感字段如密码不需要记录变更可通过参数指定忽略列-- 审计public.users表但忽略password和last_login字段 SELECT audit.audit_table( target_table : public.users, audit_rows : true, audit_query_text : true, ignored_cols : ARRAY[password, last_login] );3. 仅语句级审计不记录行数据如需降低审计开销可仅记录操作语句而不保存具体行数据-- 仅记录操作语句不保存行级变更 SELECT audit.audit_table( target_table : public.products, audit_rows : false, audit_query_text : true ); 审计日志查询如何分析数据变更audit-trigger的审计日志存储在audit.logged_actions表中通过简单查询即可获取关键信息。查看特定表的变更历史-- 查询public.users表的所有变更记录 SELECT event_id, action_tstamp_tx AS 变更时间, session_user_name AS 操作用户, action AS 操作类型, row_data AS 原始数据, changed_fields AS 变更字段 FROM audit.logged_actions WHERE table_name users ORDER BY action_tstamp_tx DESC;追踪UPDATE操作的字段变更changed_fields字段hstore类型记录了具体的字段变更可通过hstore函数解析-- 查看用户ID100的更新历史 SELECT action_tstamp_tx, (changed_fields-email) AS 旧邮箱, (changed_fields-email) AS 新邮箱 FROM audit.logged_actions WHERE table_name users AND action U AND (row_data-id) 100;查看触发变更的SQL语句当audit_query_text设为true时可通过client_query字段查看原始SQL-- 查看最近10条变更的SQL语句 SELECT action_tstamp_stm, session_user_name, client_query FROM audit.logged_actions ORDER BY action_tstamp_stm DESC LIMIT 10;⚙️ 高级配置性能优化与定制化索引优化建议audit.logged_actions表默认创建了三个索引定义于audit.sql#L80-L82logged_actions_relid_idx按表OID查询logged_actions_action_tstamp_tx_stm_idx按时间戳排序logged_actions_action_idx按操作类型过滤对于大型系统建议根据查询模式添加额外索引例如-- 按用户和时间范围查询的索引 CREATE INDEX idx_logged_actions_user_time ON audit.logged_actions(session_user_name, action_tstamp_tx);清理历史审计数据为避免审计表过大可定期清理历史数据-- 保留最近3个月的审计记录 DELETE FROM audit.logged_actions WHERE action_tstamp_tx NOW() - INTERVAL 3 months; 与同类工具对比audit-trigger的优势特性audit-triggerpgAudit实现方式纯SQL触发器C扩展安装难度简单SQL脚本需编译安装记录内容行级变更、SQL语句、用户信息主要记录语句级操作定制性高忽略列、字段过滤中等性能影响低可配置粒度中audit-trigger特别适合需要轻量级、易配置审计方案的场景而pgAudit更适合对数据库级审计有严格要求的企业环境。 使用注意事项权限控制 audit模式默认对public用户不可见audit.sql#L18需显式授权GRANT USAGE ON SCHEMA audit TO audit_user; GRANT SELECT ON audit.logged_actions TO audit_user;事务一致性审计记录的时间戳使用current_timestamp和statement_timestamp()确保与事务时间一致audit.sql#L103-L104TRUNCATE操作默认会记录TRUNCATE语句但不会保存被删除的数据因TRUNCATE不触发行级触发器 总结audit-trigger通过PostgreSQL的触发器机制提供了一种简单而强大的数据审计方案。无论是开发环境中的调试追踪还是生产环境的合规审计都能满足基本需求。其核心价值在于零侵入性和高度可定制让开发者无需修改业务代码即可实现数据变更的全流程记录。如需进一步扩展功能可参考项目文档或社区fork版本如支持jsonb存储的iloveitaly/audit-trigger根据实际需求进行定制开发。【免费下载链接】audit-triggerSimple, easily customised trigger-based auditing for PostgreSQL (Postgres). See also pgaudit.项目地址: https://gitcode.com/gh_mirrors/au/audit-trigger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI Agent白手起家52: 从零搭建钉钉智能助手——资源准备与核心架构实现

AI Agent白手起家52: 从零搭建钉钉智能助手——资源准备与核心架构实现

纲要 项目准备:开发资源获取 Python 与 VSCode 环境配置大模型 API Key 获取(硅基流动、CloseAI)GitHub Copilot 开启 AI 辅助编程钉钉开放平台应用创建与 Stream 模式配置LangSmith 可观测性追踪开通 项目架构概览 目录结构核心模块关系&…

2026/10/15 11:41:26 阅读更多 →
Volar AI扩展跨平台支持现状与技术解析

Volar AI扩展跨平台支持现状与技术解析

1. Volar AI扩展的现状与背景解析Volar作为Vue官方推荐的开发工具,近期推出了AI扩展功能,但当前仅正式支持macOS平台。这一限制让不少Windows和Linux开发者感到困惑。作为长期使用Vue全家桶的全栈开发者,我深入研究了这一现象背后的技术原因和…

2026/10/15 12:10:15 阅读更多 →
OpenMDAO 2025路线图解读:未来多学科优化框架的发展方向

OpenMDAO 2025路线图解读:未来多学科优化框架的发展方向

OpenMDAO 2025路线图解读:未来多学科优化框架的发展方向 【免费下载链接】OpenMDAO OpenMDAO repository. 项目地址: https://gitcode.com/gh_mirrors/op/OpenMDAO OpenMDAO作为一款强大的多学科优化框架,2025年将迎来一系列重要升级。本文将深入…

2026/10/16 15:28:42 阅读更多 →

最新新闻

车牌识别技术全解析:从原理到项目落地的完整指南

车牌识别技术全解析:从原理到项目落地的完整指南

1. 从一次小区门口的经历说起前几天傍晚,我开车回小区,刚好赶上晚高峰。门口道闸前排着几辆车,换作以前,这个点多少要堵一阵子——取卡、刷卡、掏手机扫码,每辆车磨叽十几秒,长队就排到了马路上。但那天不一…

2026/10/17 3:45:56 阅读更多 →
大模型训练优化器深度解析:从SGD到AdamW的演进与实战配置

大模型训练优化器深度解析:从SGD到AdamW的演进与实战配置

大模型训练跑到一半 loss 突然发散、把优化器从 Adam 换成 SGD 后收敛反而更慢、同一个模型在不同框架里效果对不上——这些坑我都在实际训练中踩过。排查到最后,十有八九不是网络结构写错了,而是对优化器的理解差了一层。优化器看着就是一行 API 调用&a…

2026/10/17 3:45:56 阅读更多 →
微服务核心技术与实战:注册中心、分布式事务与流量治理解析

微服务核心技术与实战:注册中心、分布式事务与流量治理解析

聊到微服务,很多人第一反应就是一堆“八股文”:注册中心选型、分布式事务、熔断降级、服务拆分原则……背得滚瓜烂熟,但真扔到生产环境,一压测、一故障演练,问题就全暴露出来了。这篇文章不是帮大家背答案,…

2026/10/17 3:45:56 阅读更多 →
错误数据也能加速模型蒸馏?8倍训练效率提升的底层逻辑与实战复现

错误数据也能加速模型蒸馏?8倍训练效率提升的底层逻辑与实战复现

第一次看到这个标题的时候,我是先皱眉再拍大腿的。皱眉是因为“错误数据”这四个字跟咱们平时做数据清洗时“坏样本必须扔掉”的信仰直接对着干;拍大腿是因为细想之后,这件事确实成立,而且底层逻辑比想象中硬核得多。这项来自 202…

2026/10/17 3:45:56 阅读更多 →
CentOS 7部署Flink v1.12实战:流批一体入门与standalone集群搭建

CentOS 7部署Flink v1.12实战:流批一体入门与standalone集群搭建

1. 项目概述:为什么在 CentOS 上部署 Flink v1.12 是一个务实的测试起点 Flink v1.12 是 Apache Flink 历史上一个承前启后的关键版本——它首次将 Blink 引擎完全合并进主干,统一了 SQL 执行层与 DataStream API 的底层运行时;同时正式废弃…

2026/10/17 3:45:56 阅读更多 →
PyTorch模型跨框架部署:ONNX转TensorFlow实战与避坑指南

PyTorch模型跨框架部署:ONNX转TensorFlow实战与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 3:44:56 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →