暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

【转载】postgresql的审计日志实现方案

原创 GaussDB数据库 2021-11-26
935

原文链接:https://bbs.huaweicloud.com/blogs/255747

开源的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是一个十分开放的架构,用户可以自行 开发插件来实现自己想要的审计功能,可以按需定制。

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

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

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

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 1. 打开log_statement参数。
  • 2. 使用pg_audit插件
    • pgaudit.log
    • 日志的格式
  • 3.自己开发插件