PolarDB-PG pgaudit插件介绍
关于 PolarDB PostgreSQL 版
PolarDB PostgreSQL 版是一款阿里云自主研发的云原生关系型数据库产品,100% 兼容 PostgreSQL,高度兼容Oracle语法;采用基于 Shared-Storage 的存储计算分离架构,具有极致弹性、毫秒级延迟、HTAP 、Ganos全空间数据处理能力和高可靠、高可用、弹性扩展等企业级数据库特性。同时,PolarDB PostgreSQL 版具有大规模并行计算能力,可以应对 OLTP 与 OLAP 混合负载。
前言
在当今数据驱动的世界中,数据库安全和合规性变得至关重要。随着数据泄露和滥用事件的不断增加,保护数据库免受未经授权访问和滥用的风险变得尤为重要。在这种情况下,审计数据库活动是一种关键的措施,可以帮助组织发现和防止潜在的风险和安全漏洞。
pgaudit是一个为PostgreSQL数据库设计的审计扩展模块,为用户提供了一种可配置的方式来记录和监视数据库的查询、DDL和DML语句。它可以帮助用户满足合规性要求,检测和防止数据库的滥用和未经授权行为。
通过使用PolarDB-PG中pgaudit插件,用户可以实现对数据库活动的全面监控和记录,并生成符合合规性标准的审计报告。它可以帮助组织满足各种合规性要求,并提高数据库的安全性和可信度。
同时pgaudit也能保住用户减少不必要的审计内容。在云环境中审计日志日志存储可能是会收费的,所以通过pgaudit进行审计日志的过滤可以帮助用户节省费用。
在本篇文章中,我们将深入介绍pgaudit的功能和优势,探讨如何使用pgaudit来加强数据库的安全性和合规性。无论您是数据库管理员、安全专家还是合规性官员,本文将为您提供有关pgaudit的详细信息,并帮助您了解如何使用它来保护您的数据库免受潜在的风险和威胁。
功能特点
pgaudit是一个用于PostgreSQL数据库的扩展模块,用于审计数据库活动的工具。它提供了一种可配置的方式来记录和监视数据库的查询、DDL和DML语句。pgaudit可以帮助用户满足合规性需求,以及检测和防止数据库的滥用和未经授权的行为。
pgaudit的主要功能包括:
监视和记录数据库活动:pgaudit可以记录数据库的登录和注销事件、查询语句、DDL语句(如创建、修改和删除表、索引等)、DML语句(如插入、更新和删除数据等)以及其他数据库活动。
审计日志过滤和配置:用户可以根据自己的需求配置pgaudit的审计日志,选择要监视和记录的事件类型、对象类型、特定用户或角色等。
合规性支持:pgaudit可以记录所有的数据库活动,并生成符合合规性要求的审计报告。它可以帮助用户满足各种合规性标准。
安全性增强:pgaudit可以帮助用户检测和防止数据库的滥用和未经授权的行为。它可以记录和报告异常或可疑的数据库活动,如异常的查询语句、非法的DDL语句等。
高性能和低资源消耗:pgaudit使用高效的日志记录机制,可以在不影响数据库性能的情况下记录和监视数据库活动。它可以通过调整配置参数来平衡性能和资源消耗。
总结来说,pgaudit是一个功能强大的审计工具,可以帮助用户监视、记录和分析数据库活动,提高数据库的安全性和合规性。
设计原理
pgaudit的设计原理是基于钩子函数机制拦截和记录数据库活动,同时提供灵活的配置选项来定制化审计日志记录。这种设计使得pgaudit能够高效地记录和监视数据库活动,并帮助用户满足合规性要求,提高数据库的安全性和可信度。
具体来说,pgaudit会注册一个钩子函数,以拦截和记录以下类型的事件:
登录和注销事件
查询语句
DDL语句(如表、索引的创建、修改和删除)
DML语句(如插入、更新和删除数据)
当这些事件发生时,pgaudit将相应的信息(如事件类型、用户名、时间戳、SQL语句等)写入审计日志文件中。
注意事项
线下版本具备pgaudit的所有功能。
线上公共云版本因为安全的问题。只提供在当前已有日志的二次过滤。
输出格式
例如:
DO $$
BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';
END $$;复制
可以审计到其CREATE TABLE 语句。详细内容有
AUDIT_TYPE - 会话或对象.
STATEMENT_ID - 此会话的唯一语句ID。每个语句ID表示后端调用。即使没有记录某些语句,语句id也是连续的。当记录多个关系时,语句ID可能有多个条目。
SUBSTATEMENT_ID - 主语句中每个子语句的顺序ID。例如,从一个查询中调用函数。即使没有记录一些子语句,子语句id也是连续的。当记录多个关系时,子语句ID可能有多个条目。
CLASS - 例如 READ, ROLE (详见 pgaudit.log).
COMMAND - 例如 ALTER TABLE, SELECT。
OBJECT_TYPE - TABLE, INDEX, VIEW等. 可用于SELECT、DML和大多数DDL语句。
OBJECT_NAME - 完全限定对象名(例如public.account)。可用于SELECT、DML和大多数DDL语句。
STATEMENT - 在后端执行的语句。
PARAMETER - 如果设置了pgaudit.log_parameter 后,该字段将包含引用CSV的语句参数。
配置参数
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.
可以使用逗号分隔的列表提供多个类,通过在类前面加 - 号可以减去类(参阅 会话审计日志记录).
默认值为 none.
pgaudit.log_catalog
指定如果语句中的所有关系都在pg_catalog中,则应该启用会话日志记录。禁用此设置将减少psql和PgAdmin等工具在日志中大量查询catalog的噪音。
默认值为 on。

pgaudit.log_level
指定将用于日志条目的日志级别 (详见有效级别的消息严重级别),但注意不允许出现 ERROR, FATAL, 和PANIC 。此设置用于回归测试,对于测试或其他目的的最终用户也可能有用。
默认值为 log.

pgaudit.log_parameter
指定审计日志记录应该包括与语句一起传递的参数。当参数出现时,它们将包含在语句文本之后的CSV格式中。
默认值为 off.

pgaudit.log_relation
指定会话审计日志记录是否应该为SELECT或DML语句中引用的每个关系(表、视图等)创建单独的日志条目。对于不使用对象审计日志记录的详尽日志记录,这是一个有用的快捷方式。

默认值为 off.
pgaudit.log_statement_once
指定日志记录是包含带有语句/子语句组合的第一个日志条目的语句文本和参数,还是包含每个条目。禁用此设置将减少冗长的日志记录,但可能会使确定生成日志条目的语句变得更加困难,尽管语句/子语句对以及进程id应该足以识别与前一个条目一起记录的语句文本。
默认值 off.

pgaudit.role
指定用于对象审计日志记录的主角色。可以通过将多个审计角色授予主角色来定义它们。这允许多个组负责审计日志记录的不同方面。
该项没有默认值.

PolarDB-PG pgaudit最佳实践
我们在阿里云PolarDB数据中做一个实践实例
创建测试database和对象审计用户

登录pgaudit_testdb并创建测试表test_audit_1和test_audit_2。
并且将test_audit_1进行对象审计。
控制台上设置log_statement为none,避免影响多余日志输出。
检查相关参数设置。
执行两个表的插入语句。

对test_audit_2表select和update动作进行审计。
并在test_audit_1和test_audit_2表上执行update和delete操作。

通过SQL洞察查询审计结果,test_audit_1表所有操作被审计,test_audit_2只审计了update操作,符合预期。
