You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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配置步骤,都是按官方指引来的:

  1. 重置现有审计规则
SELECT pg_proaudit_reset();
  1. 启用数据库级别的所有DDL审计
SELECT pg_proaudit_set_object('all_ddl','database');
  1. 启用表级别的所有DML审计
SELECT pg_proaudit_set_object('all_dml','table');
  1. 持久化新规则
SELECT pg_proaudit_save();
  1. 重载配置让规则立即生效
SELECT pg_proaudit_reload();
  1. 验证激活的规则
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

火山引擎 最新活动