用于审计的 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
我想知道我们是否也可以使用事件触发器对 insert、update 事件做出反应,并使用这个单一触发器进行所有审计?
这行不通。
"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".
我即将在我的数据库中实施审计系统,并且正在寻找最有效的方法。
我已经阅读了 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
我想知道我们是否也可以使用事件触发器对 insert、update 事件做出反应,并使用这个单一触发器进行所有审计?
这行不通。
"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".