postgresql的审计日志实现方案
开源的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是一个十分开放的架构,用户可以自行 开发插件来实现自己想要的审计功能,可以按需定制。
这三种方式 第一种对性能影响很大 并且日志都在系统日志里,使用体验差;
第二种需要额外安装插件 使用体验稍好,但是还是依赖系统日志
第三种最灵活自由,但是需要自行开发 对团队的技术水平要求较高
综上,用户可以根据自己的实际情况来选择不同的实现方式。没有哪一种是最好的,只有适合自己的才是最好的。
- 点赞
- 收藏
- 关注作者
评论(0)