postgresql的审计日志实现方案

举报
zenith 发表于 2021/04/08 09:14:02 2021/04/08
【摘要】 本文介绍了三种pg审计日志的实现思路

开源的pg版本是没有日志审计功能的,但是如果客户想要使用审计功能, 该怎么办呢 ?

目前来看,有三种实现方式:

1. 打开log_statement参数。

log_statement参数控制记录哪些SQL语句。有效值是none(off),ddl,mod和all(所有语句)。
ddl记录所有数据定义语句,例如CREATE,ALTER和DROP语句。
mod记录所有ddl语句,以及数据修改语句,如INSERT,UPDATE,DELETE,TRUNCATE和COPY FROM。
all记录所有的语句

一般的OLTP系统审计级别设置为ddl就够了,因为记录输出各种SQL对性能的影响还是蛮大的,安全级别高一点的也可以设置mod模式。

2. 使用pg_audit插件

这种方式也是依赖于pg的系统日志。

pgaudit.log

指定会话审计日志记录将记录哪类语句。可能的值是:

  • READ: SELECT COPY 当源是关系或查询时。
  • WRITE: INSERT, UPDATE, DELETE, TRUNCATE, 和COPY 当目标是一个关系时。
  • FUNCTION: 函数调用和 DO 块.
  • ROLE: 与角色和特权相关的语句: GRANT, REVOKE, CREATE/ALTER/DROP ROLE.
  • DDL: 不包含在 ROLE 类中的所有DDL.

MISC: 其他的一些命令, 比如 DISCARD, FETCH, CHECKPOINT, VACUUM

日志的格式

AUDIT_TYPE - 告知你目前的audit 的方式是 session 还是 object

STATEMENT_ID - 主语句的会话ID

SUBSTATEMENT_ID - 主语句中每个子语句的顺序ID。

Operation type 操作的方式是DDL DCL DML 

COMMAND -  操作的命令

OBJECT_TYPE - 操作的OBJECT 类型

OBJECT_NAME - 操作的OBJECT 类型的名字,例如表名,存储过程名等等

STATEMENT - 执行的语句

PARAMETER - 相关的参数

3.自己开发插件

由于pg是一个十分开放的架构,用户可以自行 开发插件来实现自己想要的审计功能,可以按需定制。

这三种方式 第一种对性能影响很大 并且日志都在系统日志里,使用体验差;

第二种需要额外安装插件 使用体验稍好,但是还是依赖系统日志

第三种最灵活自由,但是需要自行开发 对团队的技术水平要求较高

综上,用户可以根据自己的实际情况来选择不同的实现方式。没有哪一种是最好的,只有适合自己的才是最好的。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。