6.4.5.5 配置审核日志记录 Feature

本节介绍如何配置审核日志记录 Feature,例如审核日志插件向其写入事件的文件,写入事件的格式以及是否启用日志文件压缩和加密。

有关影响审核日志记录的用户定义函数和系统变量的其他信息,请参见审核日志功能审核日志选项和变量

审核日志插件还可以基于事件内容或事件源自的帐户,控制将哪些审核事件写入审核日志文件。参见第 6.4.5.7 节“审核日志过滤”

审核日志文件的命名约定

要配置审核日志文件名,请在服务器启动时设置audit_log_file系统变量。服务器数据目录中的默认名称为audit.log。为了获得最佳安全性,请将审核日志写入只有 MySQL 服务器和有正当理由查看日志的用户才能访问的目录。

从 MySQL 5.7.21 开始,该插件将audit_log_file值解释为由可选的前导目录名称,基本名称和可选的后缀组成。如果启用了压缩或加密,则有效文件名(实际上用于创建日志文件的名称)与配置的文件名不同,因为它具有其他后缀:

有效的审核日志文件名是将适用的压缩和加密后缀添加到配置的文件名后得到的名称。例如,如果配置的audit_log_file值为audit.log,则有效文件名是下 table 中显示的值之一。

Enabled Features 有效文件名
没有压缩或加密 audit.log
Compression audit.log.gz
Encryption audit.log.enc
Compression, encryption audit.log.gz.enc

在 MySQL 5.7.21 之前,已配置和有效的日志文件名相同。例如,如果配置的audit_log_file值为audit.log,则审核日志插件将写入audit.log

审核日志插件根据有效的审核日志文件名在初始化和终止期间执行某些操作:

从 MySQL 5.7.21 开始:

在 MySQL 5.7.21 之前,仅 XML 日志格式可用,并且插件执行基本的完整性检查:

选择审核日志文件格式

要配置审核日志文件格式,请在服务器启动时设置audit_log_format系统变量。默认情况下,格式为NEW(新样式的 XML 格式)。有关每种格式的详细信息,请参见第 6.4.5.4 节“审核日志文件格式”

如果您更改audit_log_format,建议您也更改audit_log_file。否则,将存在两组具有相同基本名称但格式不同的日志文件。

Note

在 MySQL 5.7.21 之前,更改audit_log_format的值可能会导致将一种格式的日志条目写入包含不同格式的条目的现有日志文件。为避免此问题,请使用以下过程:

  • 停止服务器。

  • 更改audit_log_file系统变量的值,以便插件写入其他文件,或者手动重命名当前审核日志文件。

  • 使用新值audit_log_format重新启动服务器。审核日志插件将创建一个新的日志文件,并以所选格式将条目写入其中。

压缩审核日志文件

从 MySQL 5.7.21 开始,审计日志文件压缩可用。可以为任何日志格式启用压缩。

要配置审核日志文件压缩,请在服务器启动时设置audit_log_compression系统变量。允许的值为NONE(不压缩;默认值)和GZIP(GNU Zip 压缩)。

如果同时启用了压缩和加密,则压缩将在加密之前进行。要手动恢复原始文件,请先对其解密,然后再将其解压缩。参见手动解压缩和解密审核日志文件

加密审核日志文件

从 MySQL 5.7.21 开始,审计日志文件加密可用。可以为任何日志格式启用加密。加密基于用户定义的密码(审核日志插件生成的初始密码除外)。要使用此功能,必须启用 MySQL 密钥环,因为审核日志记录将其用于密码存储。任何钥匙圈插件都可以使用;有关说明,请参见第 6.4.4 节“ MySQL 密钥环”

要配置审核日志文件加密,请在服务器启动时设置audit_log_encryption系统变量。允许的值为NONE(不加密;默认值)和AES(AES-256-CBC 密码加密)。

要在运行时设置或获取加密密码,请使用以下用户定义的函数(UDF):

先前编写的审核日志文件不会使用新密码重新加密。如果您需要手动解密这些文件,请记录以前的密码。

有关审核日志加密 UDF 的其他信息,请参阅审核日志功能

审核日志插件初始化时,如果发现启用了日志文件加密,则会检查密钥环是否包含审核日志加密密码。如果不是,该插件会自动生成一个随机的初始加密密码,并将其存储在密钥环中。要发现此密码,请调用audit_log_encryption_password_get()

如果同时启用了压缩和加密,则压缩将在加密之前进行。要手动恢复原始文件,请先对其解密,然后再将其解压缩。参见手动解压缩和解密审核日志文件

手动解压缩和解密审核日志文件

审计日志文件可以使用标准工具解压缩和解密。仅应对已关闭(存档)且不再使用的日志文件进行此操作,而不应对审计日志插件当前正在写入的日志文件进行此操作。您可以识别已存档的日志文件,因为审核日志插件已将其重命名为在基本名称之后的文件名中包含时间戳。

对于此讨论,假定audit_log_file设置为audit.log。在这种情况下,已存档的审核日志文件具有下 table 中显示的名称之一。

Enabled Features 存档文件名
没有压缩或加密 audit.timestamp.log
Compression audit.timestamp.log.gz
Encryption audit.timestamp.log.enc
Compression, encryption audit.timestamp.log.gz.enc

要手动解压缩压缩的日志文件,请使用 gunzipgzip -d 或等效命令。例如:

gunzip -c audit.timestamp.log.gz > audit.timestamp.log

要手动解密加密的日志文件,请使用 openssl 命令。例如:

openssl enc -d -aes-256-cbc -pass pass:password -md sha256
    -in audit.timestamp.log.enc
    -out audit.timestamp.log

如果同时为审计日志记录启用了压缩和加密,则压缩将在加密之前进行。在这种情况下,文件名添加了.gz.enc后缀,与这些操作的发生 Sequences 相对应。要手动恢复原始文件,请反向执行操作。也就是说,首先解密文件,然后将其解压缩:

openssl enc -d -aes-256-cbc -pass pass:password -md sha256
    -in audit.timestamp.log.gz.enc
    -out audit.timestamp.log.gz
gunzip -c audit.timestamp.log.gz > audit.timestamp.log
审核日志文件的空间 Management 和名称轮换

审核日志文件可能会变得很大,并占用大量磁盘空间。为了能够 Management 其日志文件使用的空间,审核日志插件提供了手动或自动旋转日志文件的功能。轮换功能使用audit_log_flushaudit_log_rotate_on_size系统变量:

Note

重命名的日志文件不会自动删除。例如,在基于大小的日志文件轮换中,重命名的日志文件不会在名称序列的末尾轮换。相反,它们具有唯一的名称并且会无限期地累积。为避免过多使用空间,请定期删除旧文件,并在必要时首先对其进行备份。

以下讨论更详细地描述了日志文件轮换方法。

手动审核日志文件轮换

如果为audit_log_rotate_on_size=0(默认值),则除非手动执行,否则不会发生日志轮换。在这种情况下,当audit_log_flush值从“禁用”更改为“启用”时,审核日志插件将关闭并重新打开日志文件。日志文件重命名必须在服务器外部进行。假设日志文件名是audit.log,并且您要维护三个最新的日志文件,并通过名称audit.log.1audit.log.3循环。在 Unix 上,手动执行旋转,如下所示:

mv audit.log.2 audit.log.3
mv audit.log.1 audit.log.2
mv audit.log audit.log.1

此策略将覆盖当前的audit.log.3内容,对已归档日志文件的数量及其使用的空间进行限制。

SET GLOBAL audit_log_flush = ON;

audit_log_flush的特殊之处在于它的值仍为OFF,因此您无需在再次启用它执行另一次刷新之前明确禁用它。

Note

对于 JSON 格式的日志记录,手动重命名审核日志文件使它们无法用于日志读取功能,因为审核日志插件不再可以确定它们是日志文件序列的一部分(请参见第 6.4.5.6 节“读取审核日志文件”)。考虑将audit_log_rotate_on_size设置为大于 0 以使用基于尺寸的旋转。

自动审核日志文件轮换

如果audit_log_rotate_on_size大于 0,则设置audit_log_flush无效。相反,每当对当前日志文件进行写操作导致其大小超过audit_log_rotate_on_size值时,审核日志插件就会关闭该文件,对其重命名并打开一个新的日志文件。

在以下情况下也会发生自动旋转:

插件将重命名原始文件,如下所示:

mysql> SELECT FROM_UNIXTIME(1515934443.7726520);
+-----------------------------------+
| FROM_UNIXTIME(1515934443.7726520) |
+-----------------------------------+
| 2018-01-14 06:54:03.772652        |
+-----------------------------------+
编写审计日志的策略

审核日志插件可以使用多种策略中的任何一种来进行日志写入。无论采用何种策略,日志记录都是在尽力而为的基础上进行的,并且不能保证一致性。

要指定写策略,请在服务器启动时设置audit_log_strategy系统变量。默认情况下,策略值为ASYNCHRONOUS,并且插件异步记录到缓冲区,await 缓冲区是否已满。可以告诉插件不要 await(PERFORMANCE)或同步登录,可以使用文件系统缓存(SEMISYNCHRONOUS),也可以在每个写入请求(SYNCHRONOUS)之后通过sync()调用强制输出。

对于异步写入策略,audit_log_buffer_size系统变量是缓冲区大小(以字节为单位)。在服务器启动时设置此变量以更改缓冲区大小。插件使用单个缓冲区,它在初始化时分配,并在终止时删除。插件不会为非异步写策略分配此缓冲区。

异步日志记录策略具有以下 Feature:

使用异步日志记录,如果在写入文件期间发生问题,或者插件无法完全关闭(例如,在服务器主机意外退出的情况下),则可能会损害日志文件的完整性。为了降低这种风险,请将audit_log_strategy设置为使用同步日志记录。

PERFORMANCE策略的缺点是,缓冲区已满时会丢弃事件。对于负载较重的服务器,审核日志可能缺少事件。

首页