【Postgresql】实现 PostgreSQL 全量审计日志:记录所有 SQL 操作及来源
文章目录
-
-
-
- 核心配置(postgresql.conf)
- 关键配置解析
- 应用配置步骤
- 日志分析示例
- 性能影响与优化建议
- 总结
-
-
在企业级数据库管理中,审计日志是安全合规和故障排查的关键。本文将指导您在PostgreSQL中配置完整的审计日志,实现:
- 记录所有SQL语句(包括SELECT)
- 捕获客户端来源IP地址
- 使用结构化格式存储日志
- 自动管理日志文件生命周期
核心配置(postgresql.conf)
# ━━━━━━━━━━━━━━━━━━━━━━━━━━
# 日志文件管理
# ━━━━━━━━━━━━━━━━━━━━━━━━━━
logging_collector = on # 启用日志收集器
log_directory = 'pg_audit_log' # 独立日志目录(建议使用单独磁盘分区)
log_filename = 'audit-%Y-%m-%d_%H%M%S.csv' # CSV格式+时间戳命名
log_rotation_age = 1d # 每日轮转
log_rotation_size = 100MB # 单文件最大100MB
log_truncate_on_rotation = on# ━━━━━━━━━━━━━━━━━━━━━━━━━━
# 审计内容配置
# ━━━━━━━━━━━━━━━━━━━━━━━━━━
log_connections = on # 记录连接事件
log_disconnections = on # 记录断开事件
log_statement = 'all' # 记录所有SQL语句(含SELECT)
log_hostname = off # 禁用DNS解析(直接记录IP)
log_destination = 'csvlog' # CSV结构化格式# ━━━━━━━━━━━━━━━━━━━━━━━━━━
# 附加诊断信息
# ━━━━━━━━━━━━━━━━━━━━━━━━━━
log_duration = on # 记录语句执行时间
log_lock_waits = on # 记录锁等待
log_temp_files = 0 # 记录所有临时文件使用
关键配置解析
-
日志捕获基础
logging_collector = on
:启用后台进程捕获日志log_directory
:推荐使用独立磁盘分区,避免I/O竞争
-
审计核心配置
log_statement = 'all'
:记录所有SQL操作
可选值:ddl
(仅结构变更)/mod
(数据变更+DDL)log_hostname = off
:直接记录IP地址,避免DNS解析延迟log_destination = 'csvlog'
:结构化日志格式,包含25个标准字段
-
来源IP捕获原理
CSV日志自动包含