pgAudit - 开源PostgreSQL审计日志

翻译自官方文档:传送门

能力有限,如有错误请指正

介绍

PostgreSQL审计扩展(pgAudit)通过标准的PostgreSQL日志记录工具提供详细的会话和(或)对象审计日志记录。

pgAudit的目标是为PostgreSQL用户提供生成审计日志的能力,这些日志通常需要符合政府、金融或ISO认证。

审计是对个人或组织账户的正式检查,通常由独立机构进行。pgAudit收集的信息被正确地称为审计跟踪或审计日志。本文档中使用了审计日志这一术语。

为什么使用 pgAudit?

基本语句日志记录可以由 log_statement = all 的标准日志记录工具提供。这对于监视和其他使用是可以接受的,但是没有提供审计所需的详细程度。仅仅拥有对数据库执行的所有操作的列表是不够的。还必须能够找到审计人员感兴趣的特定报表。标准的日志记录功能显示了用户的请求,而pgAudit关注的是数据库满足请求时发生的事情的细节。

例如,审计人员可能想要验证某个特定的表是在文档化的维护窗口中创建的。对于grep来说,这似乎是一项简单的工作,但是如果您看到这样一个(故意混淆的)例子:

BEGIN
    EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';
END $$;

标准日志记录会给您这样的结果:

LOG:  statement: DO $$
BEGIN
    EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';
END $$;

在动态创建表的情况下,查找感兴趣的表可能需要一些代码知识。这并不理想,因为只搜索表名更可取。这就是pgAudit的用武之地。对于相同的输入,它将在日志中产生以下输出:

AUDIT: SESSION,33,1,FUNCTION,DO,,,"DO $$
BEGIN
    EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)';
END $$;"
AUDIT: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT)

不仅 DO 块被记录,子语句2还包含 CREATE TABLE 的全文,其中包含语句类型、对象类型和全限定名称,以方便搜索。

当记录 SELECT语句 和 DML语句 时,pgAudit可以配置为记录语句中引用的每个关系的单独条目。查找涉及特定表的所有语句不需要解析。实际上,我们的目标是,语句文本主要是为深度取证提供的,不应该被要求进行审计。

使用注意事项

根据设置的不同,pgAudit可以生成大量日志记录。小心地确定在您的环境中需要审计哪些日志,以避免日志记录过多。

例如,在OLAP环境中工作时,审计大型事实表中的日志插入可能不太明智。日志文件的大小可能是插入的实际数据大小的许多倍,因为日志文件表示为文本。由于日志通常与操作系统一起存储,这可能导致磁盘空间很快耗尽。在不可能将审计日志记录限制到某些表的情况下,请确保在测试时评估性能影响,并在日志卷上分配大量空间。对于OLTP环境也是如此。即使插入卷没有那么高,审计日志记录的性能影响仍然会显著影响延迟。

为了限制SELECT和DML语句记录的关系审计的数量,考虑使用对象审计日志记录(请参阅对象审计)。对象审计日志允许选择要记录的关系,从而减少总体日志量。然而,当添加新关系时,它们必须显式地添加到对象审计日志记录中。在这种情况下,将指定的表排除在日志之外并包含所有其他表的编程解决方案可能是一个不错的选择。

PostgreSQL版本兼容性

pgAudit支持Postgr

你可能感兴趣的:(数据库,操作系统,git)