开启pg_audit后,审计日志默认写入log_directory下的文本文件而非pg_log表,需通过外部工具解析或使用pgauditlogtofile扩展获取结构化日志;关键配置包括log_level=log、log_statement_once=off、正确授权pg_read_server_files,并避免混淆pg_audit与csvlog机制。审计日志开启后,谁在查什么表?用 pg_audit 查实时行为postgresql 开启 pg_audit 后,日志默认写入数据库系统日志(log_directory),不进 pg_log 表,没法直接 select。想快速定位某张表(比如 account_balance)被谁、何时、以什么条件查过,得先确认日志落盘位置和格式。pg_audit.log_level 建议设为 log(不是 warning),否则部分语句可能不记录必须启用 pg_audit.log_statement_once = off,否则带参数的 Prepared Statement 只记一次,漏掉实际执行上下文金融场景下常见误配:pg_audit.role 设成 audit_admin,但没给该角色 pg_read_server_files 权限,导致无法用 pg_read_file() 读日志文件用 pg_log 表替代文件解析?别硬上,先看版本和配置PostgreSQL 14+ 支持将日志输出到 csvlog 格式并自动载入 pg_log 系统视图,但前提是:日志格式必须是 csv,且 log_destination 包含 csvlog ------ pg_audit 默认不走这条路,它只往 stderr 或文件里写原始文本。若强行把 pg_audit 日志塞进 csvlog,会因字段缺失或格式错位导致解析失败,log_line_prefix 里没加 %m %u %d 就根本对不上时间/用户/库名真正能进 pg_log 的只有 log_statement = 'all' 或 log_min_duration_statement 触发的通用日志,和 pg_audit 是两套机制,混用等于自建盲区稳妥做法:用外部工具(如 awk + grep)按固定分隔符切日志,或改用 pgauditlogtofile 扩展(支持结构化 JSON 输出)SELECT 被审计了,但 WHERE 条件里带变量?注意参数化查询的记录粒度应用层用 JDBC/ODBC 执行 SELECT * FROM trade_order WHERE user_id = ?,审计日志里大概率只记 SELECT * FROM trade_order WHERE user_id = $1,不会展开真实值。这不是 bug,是设计使然------避免日志泄露敏感数据,但也会让合规回溯卡在"知道查了谁,不知道查的具体是谁"。若必须记录实际参数值,需同时开启 log_parameter_max_length = -1(不限长)和 log_statement = 'mod',但这会显著增加日志体积,且违反 PCI DSS 对日志脱敏的要求更可行的路径:在应用侧打点,把关键查询的 user_id、order_id 写入独立审计表,用事务绑定确保和 DB 操作强一致特别注意:pg_audit 对 EXECUTE 语句默认不审计,如果业务大量用 PREPARE + EXECUTE,得显式配置 pg_audit.log_catalog = on 并加 pg_audit.log_statement = 'all'权限收紧后,DBA 自己也查不了审计日志?绕过不是办法,要分层授权金融系统常要求"审计日志只读权限与生产账号隔离",结果 DBA 登录后执行 SELECT pg_read_file('pg_log/postgresql-2024-04-01.log') 报错 permission denied。这不是权限没给够,而是 PostgreSQL 的安全模型里,pg_read_file() 属于 superuser-only 函数,普通 audit_reader 角色无权调用。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
XS0301061 小时前
Java 基础笔记(二)海寻山1 小时前
Java 泛型 (Generic) 入门到精通:语法 + 原理 + 实战 + 避坑2301_803538951 小时前
SQL如何避免不同团队修改同一张表_基于前缀名的授权GRANT ON语法m0_678485452 小时前
c++怎么在Windows下设置文件的安全访问控制列表(ACL)权限【底层】2301_817672262 小时前
Go语言怎么做六边形架构_Go语言六边形架构教程【简明】Dshuishui2 小时前
学习一下 Python 包管理器 uvm0_678485452 小时前
Pytest 实现两级参数化:让服务名依赖于应用名的灵活测试方案爱敲键盘的猴子2 小时前
JVM -- 类的加载Greyson12 小时前
如何监控集群 interconnect_ping与traceroute验证心跳通畅.txt