在 Azure Database for PostgreSQL 中进行审核日志记录

Azure Database for PostgreSQL 中的数据库活动审核日志记录可通过 pgaudit 扩展获取。 pgaudit 提供详细的会话和/或对象审核日志记录。

如果需要对计算和存储缩放之类的操作进行 Azure 资源级别的日志记录,请参阅 Azure 活动日志

使用注意事项

默认情况下,通过使用 Postgres 的标准日志记录设备将 pgaudit 日志语句与常规日志语句一起发出。 在 Azure Database for PostgreSQL 中,可将所有日志配置为发送到 Azure Monitor 日志存储,以便稍后在 Log Analytics 中进行分析。 如果启用 Azure Monitor 资源日志记录,系统会将日志(以 JSON 格式)自动发送到 Azure 存储、事件中心和/或 Azure Monitor 日志,具体取决于你的选择。

若要了解如何设置将日志记录到 Azure 存储、事件中心或 Azure Monitor 日志的功能,请访问服务器日志文章的资源日志部分。

安装扩展

为了能够使用 pgaudit 扩展,需要在计划使用该扩展的数据库中列入允许列表加载创建该扩展。

配置扩展设置

pgaudit 允许你配置会话或对象审核日志记录。 会话审核日志记录会发出已执行语句的详细日志。 对象审核日志记录是局限于特定关系的审核。 可以选择设置一个或两个类型的日志记录。

启用 pgaudit后,可以配置其参数以开始日志记录。

若要配置 pgaudit,可以按照以下说明操作:

使用 Azure 门户

  1. 选择 Azure Database for the PostgreSQL 的实例。

  2. 从资源菜单的“设置”下,选择“服务器参数”。

  3. 搜索 pgaudit 参数。

  4. 选择要编辑的相应参数。 例如,若要开始对 INSERTUPDATEDELETETRUNCATECOPY 语句进行日志记录,请将 pgaudit.log 设置为 WRITE

  5. 选择“保存”按钮以保存更改。

的官方pgaudit提供每个参数的定义。 请先测试参数,确认获取的是预期行为。

例如,将 pgaudit.log_client 设置为 ON 不仅会将审核事件写入服务器日志,还会将它们发送到客户端进程(如 psql)。 通常应让此设置保持禁用状态。

pgaudit.log_level 只有在 pgaudit.log_client 处于打开状态时才会启用。

在 Azure Database for PostgreSQL 中,根据 pgaudit.log 文档中的说明,不能使用 -(减)号快捷方式来设置 pgaudit。 所有必需的语句类(READ、WRITE 等)均应单独指定。

如果将 log_statement 参数设置为 DDLALL,然后运行 CREATE ROLE/USER ... WITH PASSWORD ... ;ALTER ROLE/USER ... WITH PASSWORD ... ; 命令,则 PostgreSQL 会在 PostgreSQL 日志中创建一个条目,其中密码以明文记录,这可能会导致潜在的安全风险。 这是 PostgreSQL 引擎设计的预期行为。

但是,可以使用 pgaudit 扩展并将 pgaudit.log 设置为 DDL,该扩展不会在 Postgres 服务器日志中记录任何 CREATE/ALTER ROLE 语句,这与将 log_statement 设置为 DDL 时不同。 如果需要记录这些语句,也可以将 pgaudit.log 设置为 ROLE,这会在对 CREATE/ALTER ROLE 进行日志记录时对日志中的密码进行修订。

审核日志格式

每个审核条目都以 AUDIT: 开头。 条目其余部分的格式详见 pgaudit

入门指南

若要快速开始,请将 pgaudit.log 设置为 ALL,然后打开服务器日志查看输出。

查看审核日志

访问日志的方式取决于所选的终结点。 有关 Azure 存储的信息,请参阅日志存储帐户一文。 请参阅有关事件中心的流式传输 Azure 日志一文。

Azure Monitor 日志将发送到所选的工作区。 Postgres 日志使用 AzureDiagnostics 收集模式,因此可以从 AzureDiagnostics 表查询它们。 在 Azure Monitor 日志查询概述中详细了解查询和警报。

可以通过此查询开始使用。 可以基于查询配置警报。

搜索特定服务器在过去一天生成的 Postgres 日志中的所有 pgaudit 条目

AzureDiagnostics
| where Resource =~ "<flexible-server-name>"
| where Category == "PostgreSQLLogs"
| where TimeGenerated > ago(1d)
| where Message contains "AUDIT:"

安装了 pgaudit 扩展的主要版本升级

在主要版本升级期间,pgaudit 扩展会自动删除,然后在升级完成后重新创建。 还原扩展时,不会自动保留在 pgaudit.log 或其他相关参数中设置的任何自定义配置。