【DB吐槽大会】第61期 - PG 审计功能有巨大增强空间

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 大家好,这里是DB吐槽大会,第61期 - PG 审计功能有巨大增强空间

背景


1、产品的问题点

  • PG 审计功能有巨大增强空间

2、问题点背后涉及的技术原理

  • PG 通过配置log_statement参数控制日志打印的类别: ddl dml all
  • 通过配置log_min_duration_statement , 打印执行时间超过阈值的SQL
  • 日志格式可以配置为csvlog, 或指定格式

3、这个问题将影响哪些行业以及业务场景

  • 通用

4、会导致什么问题?

  • SQL审计日志的输出位置和其他日志混合打印到相同的文件中, 会导致查询和管理的复杂度增加. 基于文件的搜索也比较麻烦, 不支持索引等.
  • SQL审计日志可以控制的类别非常有限, 无法满足精细化审计需要.
  • all打印的内容过多, 导致性能下降、存储资源消耗过度. DML则记录下了所有的修改操作, DDL只记录DDL语句.

5、业务上应该如何避免这个坑

  • 可以使用pgaudit插件, 增加配置维度
/* Bits within auditLogBitmap, defines the classes we understand */    
#define LOG_DDL                 (1 << 0)        /* CREATE/DROP/ALTER objects */    
#define LOG_FUNCTION    (1 << 1)        /* Functions and DO blocks */    
#define LOG_MISC                (1 << 2)        /* Statements not covered */    
#define LOG_READ                (1 << 3)        /* SELECTs */    
#define LOG_ROLE                (1 << 4)        /* GRANT/REVOKE, CREATE/ALTER/DROP ROLE */    
#define LOG_WRITE               (1 << 5)        /* INSERT, UPDATE, DELETE, TRUNCATE */    
#define LOG_NONE                0                       /* nothing */    
#define LOG_ALL                 (0xFFFFFFFF)    /* All */  
/*    
 * GUC variable for pg_audit.role    
 *    
 * Administrators can choose which role to base OBJECT auditing off of.    
 * Object-level auditing uses the privileges which are granted to this role to    
 * determine if a statement should be logged.    
 */    
char *auditRole = NULL;    
/*    
 * Object type, used for SELECT/DML statements and function calls.    
 *    
 * For relation objects, this is essentially relkind (though we do not have    
 * access to a function which will just return a string given a relkind;    
 * getRelationTypeDescription() comes close but is not public currently).    
 *    
 * We also handle functions, so it isn't quite as simple as just relkind.    
 *    
 * This should be kept consistent with what is returned from    
 * pg_event_trigger_ddl_commands(), as that's what we use for DDL.    
 */    
#define OBJECT_TYPE_TABLE                       "TABLE"    
#define OBJECT_TYPE_INDEX                       "INDEX"    
#define OBJECT_TYPE_SEQUENCE            "SEQUENCE"    
#define OBJECT_TYPE_TOASTVALUE          "TOAST TABLE"    
#define OBJECT_TYPE_VIEW                        "VIEW"    
#define OBJECT_TYPE_MATVIEW                     "MATERIALIZED VIEW"    
#define OBJECT_TYPE_COMPOSITE_TYPE      "COMPOSITE TYPE"    
#define OBJECT_TYPE_FOREIGN_TABLE       "FOREIGN TABLE"    
#define OBJECT_TYPE_FUNCTION            "FUNCTION"    
#define OBJECT_TYPE_UNKNOWN                     "UNKNOWN"    

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • pgaudit依旧有增强空间, 同时pgaudit属于第三方插件, 质量和代码质量如何保障? 遇到问题的修复周期如果保障?

7、数据库未来产品迭代如何修复这个坑

  • 希望内核支持更强大的审计配置, 包含pgaudit的能力.
  • 不带条件的DML (delete, update)
  • 影响行数超过N(可配置)的DML(update, delete)
  • 返回结果超过N(可配置)的查询(select)
  • 支持白名单SQL (支持变量, 采用query hashid表达) (不记录)
  • 支持黑名单SQL (遇到就记录下来)
  • 支持user, dbname, query, 等组合条件配置.
  • 例如如果是某个用户执行的, 则审计, 否则不审计.
  • 希望可配置审计日志的输出目标, 区别于其他日志文件. 或者可以存储在表中.
  • 支持敏感信息加密存储. 例如修改用户密码, 密码部分在输出到日志文件中时加密存储.



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
关系型数据库 C语言 PostgreSQL
pg_orphaned扩展分析(二)
pg_orphaned扩展是用于维护PostgreSQL孤儿文件的扩展,通过分析学习了查找孤儿文件的方法,同时还将学习在PostgreSQL后端(backend)如何查找指定表/视图、如何创建cache、如何使用hash表、如何使用List、如何使用正则表达式、C语言扩展如何返回结果集。
|
6月前
|
关系型数据库 C语言 PostgreSQL
pg_orphaned扩展分析(一)
pg_orphaned扩展是用于维护PostgreSQL孤儿文件的扩展,通过分析学习了查找孤儿文件的方法,同时还将学习在PostgreSQL后端(backend)如何查找指定表/视图、如何创建cache、如何使用hash表、如何使用List、如何使用正则表达式、C语言扩展如何返回结果集。
|
SQL Oracle 关系型数据库
【DB吐槽大会】第48期 - PG 性能问题发现和分析能力较弱
大家好,这里是DB吐槽大会,第48期 - PG 性能问题发现和分析能力较弱
|
SQL 关系型数据库 数据库
【DB吐槽大会】第73期 - PG 统计信息无法迁移
大家好,这里是DB吐槽大会,第73期 - PG 统计信息无法迁移
|
存储 关系型数据库 数据库
【DB吐槽大会】第59期 - PG 缺少便捷的坏块修复能力
大家好,这里是DB吐槽大会,第59期 - PG 缺少便捷的坏块修复能力
|
存储 SQL Oracle
【DB吐槽大会】第66期 - PG 缺乏更简单的数据热插拔能力
大家好,这里是DB吐槽大会,第66期 - PG 缺乏更简单的数据热插拔能力
|
存储 JSON 搜索推荐
【DB吐槽大会】第35期 - “富人”的烦恼?PG 不会自动选择索引类型
大家好,这里是DB吐槽大会,第35期 - “富人”的烦恼?PG 不会自动选择索引类型
|
SQL 存储 关系型数据库
【DB吐槽大会】第74期 - PG 不支持SQL维度资源限流
大家好,这里是DB吐槽大会,第74期 - PG 不支持SQL维度资源限流
|
SQL 关系型数据库 数据库
【DB吐槽大会】第63期 - PG 缺乏跨版本兼容性评估工具
大家好,这里是DB吐槽大会,第63期 - PG 缺乏跨版本兼容性评估工具
|
存储 安全 关系型数据库
【DB吐槽大会】第52期 - PG 函数内容不支持加密
大家好,这里是DB吐槽大会,第52期 - PG 函数内容不支持加密
下一篇
无影云桌面