Documentation Home
MySQL 8.0 参考手册  / 第 6 章 安全  / 6.4 安全组件和插件  / 6.4.5 MySQL企业审计  /  6.4.4.4 配置审计日志特征

6.4.4.4 配置审计日志特征

本节介绍如何配置审计日志特征,例如审计日志插件将事件写入的文件和写入事件的格式。

有关影响审核日志记录的系统变量的其他信息,请参阅 审核日志选项和系统变量

审计日志插件还可以根据事件发起的帐户或事件状态来控制将哪些审计事件写入审计日志文件。请参阅 第 6.4.4.5 节,“审计日志过滤”

审核日志文件命名约定

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

当审计插件初始化时,它会检查具有审计日志文件名的文件是否已经存在。如果是这样,插件会检查文件是否以标签结尾, 并在写入任何 元素</AUDIT>之前截断标签。<AUDIT_RECORD>如果日志文件存在但未以结尾 </AUDIT></AUDIT>无法截断标记,则插件认为文件格式错误且无法初始化。如果服务器在审计日志插件运行时意外退出,就会发生这种情况。在纠正问题之前不会进行日志记录。检查错误日志以获取诊断信息:

[ERROR] Plugin 'audit_log' init function returned error.

要处理此问题,请删除或重命名格式错误的日志文件并重新启动服务器。

审计日志文件格式

要配置审计日志文件格式,请 audit_log_format在服务器启动时设置系统变量。这些格式可用:

  • NEW: 新型 XML 格式。

  • OLD: 旧式 XML 格式。这是默认值。

有关每种格式的详细信息,请参阅 第 6.4.4.3 节,“审计日志文件格式”

笔记

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

  1. 停止服务器。

  2. 要么更改 audit_log_file系统变量的值,以便插件写入不同的文件,要么手动重命名当前的审计日志文件。

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

审计日志写入策略

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

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

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

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

  • 对服务器性能和可伸缩性的影响最小。

  • 在尽可能短的时间内阻塞生成审计事件的线程;也就是说,分配缓冲区的时间加上将事件复制到缓冲区的时间。

  • 输出进入缓冲区。一个单独的线程处理从缓冲区到日志文件的写入。

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

如果正在写入审计日志的文件系统已满,则会将磁盘已满错误写入错误日志。审计日志记录会一直持续到审计日志缓冲区已满为止。如果在缓冲区填满时可用磁盘空间尚未可用,则客户端会话挂起,并且在客户端会话挂起时停止服务器会导致审计日志损坏。要在客户端会话挂起时避免这种情况,请确保在停止服务器之前审计日志文件系统上有可用空间。

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

审计日志文件的空间管理

审核日志文件有可能变得非常大并占用大量磁盘空间。为了能够管理其日志文件使用的空间,审计日志插件提供了audit_log_rotate_on_sizeaudit_log_flush系统变量,它们控制审计日志文件的轮换和刷新。旋转可以手动完成,也可以根据文件大小自动完成。

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

  1. 从命令行重命名当前日志文件:

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

    此时,插件仍在写入当前日志文件,该文件已重命名为 audit.log.1.

  2. 连接到服务器并刷新日志文件,以便插件关闭它并重新打开一个新audit.log 文件:

    SET GLOBAL audit_log_flush = ON;

基于大小的自动审核日志文件轮换。  如果audit_log_rotate_on_size 大于 0, audit_log_flush则设置无效。相反,每当对日志文件的写入导致其大小超过该 audit_log_rotate_on_size 值时,审计日志插件会自动关闭该文件,重命名它,然后打开一个新的日志文件。

重命名的文件有一个时间戳并.xml 添加到最后。例如,如果文件名为 audit.log,插件会将其重命名为诸如 audit.log.15081807937726520.xml. 时间戳值类似于 Unix 时间戳,后 7 位表示小数秒部分。通过插入小数点,可以使用以下 FROM_UNIXTIME()函数解释该值:

mysql> SELECT FROM_UNIXTIME(1508180793.7726520);
+-----------------------------------+
| FROM_UNIXTIME(1508180793.7726520) |
+-----------------------------------+
| 2017-10-16 14:06:33.772652        |
+-----------------------------------+
笔记

通过基于大小的日志文件轮换,重命名的日志文件具有唯一名称并无限期累积。它们不会旋转到名称序列的末尾。为避免过度使用空间,请定期删除旧文件,必要时先备份它们。