PostgreSQL可以通过log_statement=all 提供日志审计,但是没有提供审计要求的详细程度。本文主要介绍审计插件pgaudit。
pgAudit通过标准PostgreSQL日志记录工具提供详细的会话和/或对象审核日志记录。
注意:pgAudit可能会生成大量日志。请谨慎确定要在您的环境中记录哪些审核内容,以避免过多记录,可以根据需要开启审计,关闭审计设置pgaudit.log='none',并重新加载即可。
pgAudit v1.5.X旨在支持PostgreSQL 13。 pgAudit v1.4.X旨在支持PostgreSQL 12。 pgAudit v1.3.X旨在支持PostgreSQL 11。 pgAudit v1.2.X旨在支持PostgreSQL 10。 pgAudit v1.1.X旨在支持PostgreSQL 9.6。 pgAudit v1.0.X旨在支持PostgreSQL 9.5。
指定会话审计日志记录哪些语句类。可以设置的类别 read ,write ,function,role ,ddl,misc , All 等
READ:SELECT和COPY当源是一个关系或查询。 WRITE:INSERT,UPDATE,DELETE,TRUNCATE,以及COPY当目标的关系。 FUNCTION:函数调用和DO块。 ROLE:关于角色和特权声明:GRANT,REVOKE,CREATE/ALTER/DROP ROLE。 DDL:所有DDL未包含在ROLE该类中的内容。 MISC:其他命令,例如DISCARD,FETCH,CHECKPOINT,VACUUM,SET。 MISC_SET:其他SET命令,例如SET ROLE。 ALL:包括以上所有内容。
指定当一条语句中的所有关系都位于pg_catalog中时,应该启用会话日志记录。禁用此设置将减少来自psql和PgAdmin等工具的日志噪音,这些工具会大量查询目录。
指定会话审计日志记录是否应该为SELECT或DML语句中引用的每个关系(表、视图等)创建单独的日志条目。对于不使用对象审计日志记录的穷举日志记录,这是一个非常有用的快捷方式。
例如我们要记录 ddl ,role , functiton,以及更改系统配置 方面的操作记录
指定日志消息是否对客户端进程可见
指定日志级别.默认为log
指定审核日志记录是否包含语句传递的参数。默认为off
指定日志记录是在语句/子语句组合的第一个日志条目中还是在每个条目中都包含语句文本和参数。
指定用于对象审核日志记录的主角色。可以通过将多个审核角色授予主角色来定义多个审核角色
▼▼▼wget https://codeload.github.com/pgaudit/pgaudit/tar.gz/refs/tags/1.5.0tar -xzvf pgaudit-1.5.0.tar.gzcd pgaudit-1.5.0make install USE_PGXS=1
在数据库中创建pgaudit扩展
▼▼▼vi $PGDATA/postgresql.confshared_preload_libraries='pgaudit'pgaudit.log = 'all, -misc'pgaudit.log_catalog = onpgaudit.log_client = onpgaudit.log_level = logpgaudit.log_parameter = onpgaudit.log_relation = onpgaudit.log_statement_once = on数据库重启:pg_ctl restart -D $PGDATA

日志输出:

关闭审计:

关闭审计后日志输出:

从日志结果查看,审计关闭后,相关操作不在输出到日志中。

更多精彩干货分享
点击下方名片关注
IT那活儿

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




