PostgreSQL 教程: 记录审计日志

十月 23, 2023

摘要:在本教程中,您将学习如何在 PostgreSQL 中设置审计日志记录。

PostgreSQL 中一个重要的安全特性是,对特定活动进行日志记录。当对表进行特定修改或删除表时,非常重要的是,要知道这是否是有意为之的要求,还是通过滥用数据库的访问权限来非法执行的。在本教程中,我们将学习在 PostgreSQL 中对某些类型的活动,记录审计日志所需的步骤。

准备工作

需要重点注意的一点是,记录附加的信息到 PostgreSQL 日志,会产生更多的磁盘写入,并使用大量磁盘空间。因此,在启用记录任何大量日志时,监控磁盘使用情况和 IOPS 增加非常重要。将日志和数据分离到不同的磁盘上也很重要。这样,由日志记录产生的写入,就不会导致包含数据库对象的数据目录出现任何 I/O 饱和。

操作步骤

我们将使用以下步骤,启用记录审计日志:

1. 设置log_line_prefix记录更多详细信息,像用户名、IP 地址、时间戳和应用程序名称,例如:

$ psql -c "ALTER SYSTEM SET log_line_prefix TO '%t [%p]: [%l-1] host=%r,user=%u,db=%d,app=%a'"

2. 设置log_statement为需要记录的活动类型。由于监控CREATEALTERDROP操作至关重要,我们可以使用以下设置:

$ psql -c "ALTER SYSTEM SET log_statement TO 'ddl'"

3. 重新加载服务器配置,以使更改生效:

$ psql -c "select pg_reload_conf()"

怎么做到的…

大多数因安全漏洞而对数据库造成的损害,可能会以 DDL 的形式发生。因此,我们可以使用log_statement设置,将 DDL 操作记录到日志文件中,例如CREATEALTERDROP语句,如步骤 2 中所示。为了捕获最大信息以供将来分析,重要的是修改log_line_prefix,以提供所有会话连接相关的更多信息。类似远程主机 IP 地址、端口号、应用程序名称、用户和数据库名称等这些信息,都将有助于尝试识别发生违规操作的来源,以便采取相应的措施。对本教程中讨论的两个参数的修改,需要重新加载配置才能生效,如步骤 3 中所示。