Postgres Pro 14.4搭配pg_proaudit 1.1时syslog/csvlog模式下all_dml表规则未生成DML触发器的问题求助
Postgres Pro 14.4搭配pg_proaudit 1.1时syslog/csvlog模式下all_dml表规则未生成DML触发器的问题求助
各位好,我现在在Astra Linux环境下用PostgreSQL Pro 14.4搭配pg_proaudit 1.1扩展做审计,已经把审计输出重定向到syslog(rsyslog监听local0标签AUDIT)。目前DDL操作的审计是正常的,但DML这块遇到了卡壳的问题:不管是新创建的表还是已有的表,pg_proaudit都不会自动生成对应的DML触发器,导致INSERT/UPDATE/DELETE这些操作完全不会出现在审计日志里,折腾了好一阵没找到原因,来求助大家!
先说明下我的环境细节:
- PostgreSQL Pro Enterprise 14.4,Astra Linux上用gcc 8.3.0编译
- pg_proaudit扩展版本:1.1(已通过
SELECT extversion FROM pg_extension WHERE extname='pg_proaudit';确认)
下面是我完整的pg_proaudit配置步骤,都是按官方指引来的:
- 重置现有审计规则
SELECT pg_proaudit_reset();
- 启用数据库级别的所有DDL审计
SELECT pg_proaudit_set_object('all_ddl','database');
- 启用表级别的所有DML审计
SELECT pg_proaudit_set_object('all_dml','table');
- 持久化新规则
SELECT pg_proaudit_save();
- 重载配置让规则立即生效
SELECT pg_proaudit_reload();
- 验证激活的规则
SELECT * FROM pg_proaudit_show();
这一步的实际输出和预期完全一致,结果如下:
db_name | event_type | object_type | object_oid | role_name ---------+------------+-------------+------------+---------- * | all_ddl | database | 0 | * * | all_dml | table | 0 | *
接下来我做了测试验证:
首先创建测试表,按道理这时候应该触发pg_proaudit生成行级触发器:
CREATE TABLE audit_test(id int);
然后检查触发器是否生成:
SELECT tgname, tgrelid::regclass FROM pg_trigger WHERE tgname LIKE 'audit\_%';
这里就出问题了——查询结果是空的,完全没有返回任何行,但预期应该能看到audit_test表上有audit_row_dml这类触发器。
之后我执行了DML操作,尝试生成审计日志:
INSERT INTO audit_test VALUES (1); UPDATE audit_test SET id = 2; DELETE FROM audit_test;
然后用以下方式检查日志,完全找不到这些DML操作的审计记录:
tail -f /var/log/pg_proaudit.log journalctl -f -t AUDIT
有没有朋友遇到过类似的问题?或者我哪里的配置步骤漏了、错了?麻烦帮忙看看,谢谢大家!
内容来源于stack exchange




