用于审计的 PostgreSql 事件触发器

PostgreSql Event trigger for Auditing

我即将在我的数据库中实施审计系统,并且正在寻找最有效的方法。

我已经阅读了 wiki 并进行了研究。

有这个例子:https://wiki.postgresql.org/wiki/Audit_trigger 还有这个:https://wiki.postgresql.org/wiki/Audit_trigger_91plus

在列出的示例中,您必须为每个 table(有点冗余)创建一个触发器。

然而,对于 Postgres 9.3+,我们拥有事件触发器的能力,我们可以在其中对特殊事件做出反应,例如创建、更改或删除 table。

最佳解决方案是:

create event trigger UpdateTables
   on ddl_command_end
   when tag in ( 'insert ', 'update ')
   execute procedure DoAudit();

然而 returns:

ERROR: filter value "insert " not recognized for filter variable "tag" SQL Status:42601

我想知道我们是否也可以使用事件触发器对 insertupdate 事件做出反应,并使用这个单一触发器进行所有审计?

这行不通。

"on ddl_command_end" 表示该事件旨在对数据库中的结构 更改进行调用。事件的完整参考在这里:https://www.postgresql.org/docs/current/static/event-trigger-matrix.html

看看这个:

https://eager.io/blog/audit-postgres/

这是使用 hstore 数据类型实现审计系统的一种非常简单但有效的方法。我最近尝试了它并且它完美地工作 "out of the box".