Azure Database for PostgreSQL 灵活服务器中的审核日志

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

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

使用注意事项

默认情况下,pgaudit 会记录日志,而 Postgres 的标准日志记录功能会输出常规日志语句。 在 Azure Database for PostgreSQL 中,可以将所有日志配置为发送到 Azure Monitor 的日志存储,以便稍后在 Log Analytics 中进行分析。 如果启用了 Azure Monitor 资源日志记录,系统会根据你的选择,自动以 JSON 格式将日志发送到 Azure 存储、Event Hubs 或 Azure Monitor 日志。

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

安装扩展

若要使用 pgaudit 扩展,请在计划使用该扩展的数据库中将其加入允许列表加载创建

配置扩展设置

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

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

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

使用 Azure 门户

  1. 选择你的 Azure Database for 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。 单独指定所有必需的语句类(READWRITE)。

如果将参数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 设置的任何自定义配置。