什么是审计日志记录以及如何在 PostgreSQL 中启用它

免费试用

立即开始增强您的 PostgreSQL。

A detective elephant looking through a magnifying glass to inspect those audit logs.

作者:Ana Tavares、Sarah Conway 和 Doug Ortiz

每个使用客户数据(尤其是敏感数据)工作的开发人员都知道,维护严格的安全和合规性标准至关重要。在各种措施中,数据库审计日志记录在增加额外安全层方面发挥着至关重要的作用。 

**审计日志记录**(也称为审计或审计跟踪日志记录)是指记录系统或应用程序内执行的所有活动和事务的详细日志的过程,尤其侧重于对数据的访问和更改。在数据库环境中,它涉及跟踪和记录发生的每个操作。 

如果您是 PostgreSQL 用户,则执行审计日志记录的最有效方法之一是使用 pgAudit。此 PostgreSQL 开源扩展允许详细记录数据库操作。在这篇博文中,我们将解释为什么审计日志记录至关重要,以及如何在 PostgreSQL 中使用 pgAudit 进行审计日志记录。 

pgAudit 扩展现在可供所有 Timescale Cloud 客户直接在 Timescale 控制台 中使用,在 Timescale 日志中提供详细的数据库会话和/或对象审计日志记录。否则,我们将在本文稍后介绍如何在您的本地安装上安装 pgAudit。继续阅读以了解更多信息!

审计日志和活动日志之间有什么区别?

“审计日志”和“活动日志”这两个术语经常互换使用,但它们在关注点、目的和内容方面存在明显差异。

**审计日志**主要用于确保安全、维护法规遵从性并提供可验证的操作记录。它们旨在详细跟踪谁在何时、做了什么以及如何做。它们还确保记录用户或管理员采取的每个操作,从而提供可以审计的跟踪记录,以便追究个人的责任。

另一方面,**活动日志**用于监控系统的正常运行,跟踪用户活动和系统事件以了解系统运行状况、行为和性能。它们还提供了用户如何与系统交互的见解,这可以帮助改善用户体验和优化系统性能。

数据库审计日志记录呢?

数据库审计日志记录涉及记录在数据库上执行的操作。许多组织都在严格的安全策略下运行,这些策略要求记录数据库级别的所有操作。在 PostgreSQL(和 TimescaleDB)中,这包括但不限于 SQL 查询、数据修改和登录尝试。数据库审计日志记录有助于监控用户活动、检测可疑操作以及确保符合 GDPR、HIPAA 等法规。 

如果您是 PostgreSQL(或 TimescaleDB)用户,则开源扩展 pgAudit 通过提供数据库活动的详细审计跟踪来帮助满足这些要求。这对于受制于严格监管标准的行业(例如医疗保健、金融和政府部门)尤其重要。

这正是 Timescale 的情况,我们现在提供 pgAudit 支持,为具有更严格安全性和合规性要求(例如需要记录在数据库级别完成的**所有**操作)的云客户提供服务。例如,将 pgAudit 直接集成到我们的 UI 中是我们朝着提供 HIPAA 支持迈出的重要一步,因为该扩展的详细日志记录功能可确保记录所有数据库交互。这提供了 HIPAA 合规性所需的必要审计跟踪。

审计日志记录的关键组件

为了提供可用于安全监控、合规性、故障排除和性能分析的事件时间顺序记录,审计日志记录包括以下关键组件

  1. **事件捕获:**审计日志捕获特定事件,例如用户登录、注销、SQL 查询、数据更改以及对数据库模式的修改。

  2. **时间戳:**每个记录的事件都与一个精确的时间戳相关联,指示事件发生的时间。

  3. **用户标识:**日志包括有关执行操作的用户的的信息,提供责任追究和可追溯性。

  4. **操作详细信息:**日志详细说明操作的性质。这包括操作类型(例如,SELECT、INSERT、UPDATE、DELETE)、受影响的数据或对象以及操作的结果。

  5. **上下文信息:**可以记录其他上下文(例如源 IP 地址、应用程序名称和会话 ID)以提供对事件的全面了解。

简而言之,这些是将保存在 PostgreSQL 审计表中的组件。现在,让我们看看如何使用 pgAudit 创建它。

PgAudit:PostgreSQL 审计扩展

PgAudit 是一个 PostgreSQL 扩展,允许管理员在会话和对象级别审计数据库活动。 由于我们的目标是节省开发人员的时间,我们将首先向您展示如何在 Timescale Cloud 中轻松启用它(您可以 创建一个免费帐户 并免费试用 30 天,体验我们自动化的数据分区、混合行-列存储、增量更新物化视图和高级数据压缩技术)。

如果您不介意增加工作量,我们还将向您展示如何在 vanilla PostgreSQL 或 自托管的 TimescaleDB 中对其进行配置。

如何在 Timescale Cloud 中启用和配置 pgAudit

在您的 Timescale 数据库中启用和配置 pgAudit 非常简单。 默认配置参数需要超级用户访问权限,可以通过 Timescale 服务界面进行设置。 请按照以下步骤配置 pgAudit

步骤 1:访问数据库参数 

单击左侧导航栏上的“服务”链接。

The Services link on the left-side nav bar of Timescale's Cloud UI.

单击要配置的服务。

The Services page in the Timescale console. A black arrow points to the selected service.

导航到 Timescale 界面中的“服务信息”部分。

The Service section in the Timescale interface

单击“操作”选项卡,然后单击左侧“操作”导航栏上的“数据库参数”链接,最后单击“数据库参数”部分上的“高级参数”选项卡。

The Operations tab in the Services section in the Timescale UIDatabase parameters section in the Services page in the Timescale consoleThe Advanced parameters tab in the Services page of the Timescale UI

步骤 2:配置 pgAudit

在“数据库参数”列表中搜索“pgaudit”扩展。

在“pgaudit.log”和“pgaudit.log_client”通用参数中添加要设置的值。

Typing the values you want to add in the Advanced parameters tab

有关详细说明和配置选项,请参阅 pgAudit 文档

为了最大限度地利用您的审计日志,您可以将它们导出到 CloudWatch。 这允许您将日志保留更长时间,并利用 CloudWatch 的监控和警报功能。 这篇博文将指导您 将 Amazon CloudWatch 与您的 Timescale 服务集成

如何在 Linux 上的 PostgreSQL 中启用 pgAudit

在本节中,我们将介绍

  • 安装 pgaudit

  • 设置您的环境

  • 首次配置 pgaudit

步骤 1:安装 PostgreSQL 和开发工具

首先,确保您的系统上安装了 PostgreSQL 和必要的开发工具。

对于 Ubuntu/Debian

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib postgresql-server-dev-all

对于 CentOS/RHEL

sudo yum install postgresql-server postgresql-contrib postgresql-devel

之后,通过检查当前的 psql 版本验证您的 PostgreSQL 安装。

psql -V

您应该看到类似于以下内容的结果

psql (PostgreSQL) 16.3 (Ubuntu 16.3-0ubuntu0.24.04.1)

步骤 2:安装 pgaudit

pgaudit 扩展可能可以通过您的软件包管理器获得。 或者,您可以 从源代码编译它

通过软件包管理器安装

对于 Ubuntu/Debian

sudo apt-get install postgresql-XX-pgaudit  # replace XX with your PostgreSQL version

对于 CentOS/RHEL

sudo yum install pgaudit

步骤 3:配置 PostgreSQL

1. 编辑 postgresql.conf 找到 postgresql.conf 文件,该文件通常位于 PostgreSQL 数据目录中。 

以 root 用户身份添加或修改以下配置设置

shared_preload_libraries = 'pgaudit'

(可选)您可以添加更多 pgaudit 配置,例如

pgaudit.log = 'all, -misc'

更多配置可以在 pgAudit 官方文档 中找到。

2. 重新启动 PostgreSQL:重新启动 PostgreSQL 服务以应用更改。

sudo systemctl restart postgresql

步骤 4:在数据库中创建扩展

1. 连接到您的 PostgreSQL 实例:

   sudo -su postgres
   psql

2. 在所需的数据库中创建扩展: 

  CREATE EXTENSION pgaudit;
   

步骤 5:验证安装

要验证 pgaudit 是否已正确安装和配置,您可以运行以下查询

SELECT * FROM pg_extension WHERE extname = 'pgaudit';

或者,使用快捷方式

\dx pgaudit

您应该会看到 pgaudit 的条目。

其他配置(可选):记录不同的活动

您可以配置 pgaudit 来记录不同类型的活动。 例如

ALTER SYSTEM SET pgaudit.log = 'read, write';

在对 postgresql.conf 进行更改或使用 ALTER SYSTEM 后,请始终记得以系统用户身份重新加载或重新启动 PostgreSQL。

sudo systemctl reload postgresql

用例示例:记录 SELECT 语句

以下是如何使用 pgaudit 记录特定表上的 SELECT 语句 的示例

1. 为特定表启用审计:

CREATE TABLE example_table (id serial PRIMARY KEY, data text);

2. 运行 SELECT 语句:

SELECT * FROM example_table;

对于 Timescale Cloud

检查您的 PostgreSQL 日志,查看 pgaudit 记录的审计信息。 在 Timescale Cloud 中,您只需导航到服务中的“日志”选项卡即可。

选择要检查日志的 Timescale 服务后,单击该服务的“日志”选项卡。

The Logs tab in the Timescale Services page with a black arrow pointing to it.

您的日志就在这里。

The logs you'll see after clicking the tab

对于本地安装(PostgreSQL 或自托管的 TimescaleDB)

您可以使用以下命令找到您的日志目录

SHOW log_directory;

如果是相对路径,则它将相对于您之前标识的数据目录的根路径。

在许多系统上,尤其是 Linux 发行版,PostgreSQL 日志通常存储在

/var/log/postgresql/

就是这样! 虽然需要执行很多步骤,但您现在已经在 PostgreSQL 数据库中成功安装并配置了 pgaudit

数据库审计日志记录的更好基础 

使用 pgAudit 实施审计日志记录是朝着增强数据库安全性和合规性态势迈出的重要一步。

如果您希望将高性能但坚固的数据库作为审计日志记录的基础(作为服务提供),您可以 免费试用 Timescale Cloud 30 天

它结合了您对 PostgreSQL 的所有喜爱——广泛的工具和连接器生态系统、完整的 SQL 支持和久经考验的可靠性——以及 将 PostgreSQL 提升到新水平 的强大功能集,适用于时间序列、事件、分析、甚至 AI。 凭借默认提供的 pgAudit 扩展(以及 许多其他扩展),它可以为您的最敏感数据集做好生产准备。