文档主页
MySQL 8.4 参考手册
相关文档 下载此手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  审计日志参考

8.4.5.11 审计日志参考

以下部分提供了 MySQL 企业版审计元素的参考

要安装审计日志表和函数,请使用 第 8.4.5.2 节,“安装或卸载 MySQL 企业版审计” 中提供的说明。除非这些对象已安装,否则 audit_log 插件将以(已弃用)遗留模式运行。请参见 第 8.4.5.10 节,“遗留模式审计日志过滤”

审计日志表

MySQL 企业版审计使用 mysql 系统数据库中的表来持久存储过滤器和用户帐户数据。这些表只能由拥有该数据库权限的用户访问。要使用其他数据库,请在服务器启动时设置 audit_log_database 系统变量。这些表使用 InnoDB 存储引擎。

如果缺少这些表,则 audit_log 插件将以(已弃用)遗留模式运行。请参见 第 8.4.5.10 节,“遗留模式审计日志过滤”

audit_log_filter 表存储过滤器定义。该表具有以下列

  • NAME

    过滤器名称。

  • FILTER

    与过滤器名称关联的过滤器定义。定义存储为 JSON 值。

audit_log_user 表存储用户帐户信息。该表具有以下列

  • USER

    帐户的用户名部分。对于帐户 user1@localhostUSER 部分为 user1

  • HOST

    帐户的主机名部分。对于帐户 user1@localhostHOST 部分为 localhost

  • FILTERNAME

    分配给帐户的过滤器的名称。过滤器名称将帐户与 audit_log_filter 表中定义的过滤器相关联。

审计日志函数

本节介绍每个审计日志函数的目的、调用顺序和返回值。有关这些函数可以调用的条件的信息,请参见 第 8.4.5.7 节,“审计日志过滤”

每个审计日志函数都返回一个字符串,指示操作是否成功。 OK 表示成功。 ERROR: message 表示失败。

审计日志函数将字符串参数转换为 utf8mb4,字符串返回值为 utf8mb4 字符串。以前,审计日志函数将字符串参数视为二进制字符串(这意味着它们不区分字母大小写),字符串返回值为二进制字符串。

如果从 mysql 客户端中调用审计日志函数,则二进制字符串结果将使用十六进制表示法显示,具体取决于 --binary-as-hex 的值。有关该选项的更多信息,请参见 第 6.5.1 节,“mysql — MySQL 命令行客户端”

这些审计日志函数可用

  • audit_log_encryption_password_get([keyring_id])

    此函数从 MySQL 密钥环中获取审计日志加密密码,密钥环必须启用,否则会发生错误。可以使用任何密钥环组件或插件;有关说明,请参阅 第 8.4.4 节,“MySQL 密钥环”

    在没有参数的情况下,该函数将当前加密密码作为二进制字符串检索。可以给出参数来指定要检索的审计日志加密密码。该参数必须是当前密码或已归档密码的密钥环 ID。

    有关审计日志加密的更多信息,请参阅 加密审计日志文件

    参数

    keyring_id:此可选参数指示要检索的密码的密钥环 ID。允许的最大长度为 766 字节。如果省略,则该函数将检索当前密码。

    返回值

    成功时的密码字符串(最多 766 个字节),或失败时的 NULL 和错误。

    示例

    检索当前密码

    mysql> SELECT audit_log_encryption_password_get();
    +-------------------------------------+
    | audit_log_encryption_password_get() |
    +-------------------------------------+
    | secret                              |
    +-------------------------------------+

    要通过 ID 检索密码,您可以通过查询 Performance Schema keyring_keys 表来确定存在哪些审计日志密钥环 ID。

    mysql> SELECT KEY_ID FROM performance_schema.keyring_keys
           WHERE KEY_ID LIKE 'audit_log%'
           ORDER BY KEY_ID;
    +-----------------------------+
    | KEY_ID                      |
    +-----------------------------+
    | audit_log-20190415T152248-1 |
    | audit_log-20190415T153507-1 |
    | audit_log-20190416T125122-1 |
    | audit_log-20190416T141608-1 |
    +-----------------------------+
    mysql> SELECT audit_log_encryption_password_get('audit_log-20190416T125122-1');
    +------------------------------------------------------------------+
    | audit_log_encryption_password_get('audit_log-20190416T125122-1') |
    +------------------------------------------------------------------+
    | segreto                                                          |
    +------------------------------------------------------------------+
  • audit_log_encryption_password_set(password)

    将当前审计日志加密密码设置为参数,并将密码存储在 MySQL 密钥环中。密码以 utf8mb4 字符串形式存储。以前,密码以二进制形式存储。

    如果启用了加密,则此函数将执行日志文件轮换操作,该操作将重命名当前日志文件,并开始使用密码加密的新日志文件。密钥环必须启用,否则会发生错误。可以使用任何密钥环组件或插件;有关说明,请参阅 第 8.4.4 节,“MySQL 密钥环”

    有关审计日志加密的更多信息,请参阅 加密审计日志文件

    参数

    password:密码字符串。允许的最大长度为 766 字节。

    返回值

    成功为 1,失败为 0。

    示例

    mysql> SELECT audit_log_encryption_password_set(password);
    +---------------------------------------------+
    | audit_log_encryption_password_set(password) |
    +---------------------------------------------+
    | 1                                           |
    +---------------------------------------------+
  • audit_log_filter_flush()

    调用任何其他过滤函数都会立即影响操作审计日志过滤,并更新审计日志表。如果您改为使用诸如 INSERTUPDATEDELETE 之类的语句直接修改这些表的内容,则更改不会立即影响过滤。要刷新更改并使其生效,请调用 audit_log_filter_flush()

    警告

    audit_log_filter_flush() 仅应在直接修改审计表后使用,以强制重新加载所有过滤器。否则,应避免使用此函数。实际上,它是使用 UNINSTALL PLUGININSTALL PLUGIN 卸载和重新加载 audit_log 插件的简化版本。

    audit_log_filter_flush() 会影响所有当前会话,并将其与之前的过滤器分离。当前会话将不再记录,除非它们断开连接并重新连接,或执行更改用户操作。

    如果此函数失败,将返回错误消息,并且审计日志将被禁用,直到下次成功调用 audit_log_filter_flush()

    参数

    无。

    返回值

    一个字符串,指示操作是否成功。 OK 表示成功。 ERROR: message 表示失败。

    示例

    mysql> SELECT audit_log_filter_flush();
    +--------------------------+
    | audit_log_filter_flush() |
    +--------------------------+
    | OK                       |
    +--------------------------+
  • audit_log_filter_remove_filter(filter_name)

    给定一个过滤器名称,从当前过滤器集中删除该过滤器。过滤器不存在不是错误。

    如果删除的过滤器分配给任何用户帐户,则这些用户将不再被过滤(它们将从 audit_log_user 表中删除)。过滤的终止包括这些用户的任何当前会话:它们与过滤器分离,不再记录。

    参数

    • filter_name:一个字符串,指定过滤器名称。

    返回值

    一个字符串,指示操作是否成功。 OK 表示成功。 ERROR: message 表示失败。

    示例

    mysql> SELECT audit_log_filter_remove_filter('SomeFilter');
    +----------------------------------------------+
    | audit_log_filter_remove_filter('SomeFilter') |
    +----------------------------------------------+
    | OK                                           |
    +----------------------------------------------+
  • audit_log_filter_remove_user(user_name)

    给定一个用户帐户名称,导致用户不再分配给过滤器。如果用户没有分配过滤器,这不是错误。对用户的当前会话的过滤保持不受影响。用户的新的连接将使用默认帐户过滤器进行过滤(如果有),否则不会记录。

    如果名称为 %,则该函数将删除用于任何没有显式分配过滤器的用户帐户的默认帐户过滤器。

    参数

    • user_name:用户帐户名称,以 user_name@host_name 格式,或 % 表示默认帐户。

    返回值

    一个字符串,指示操作是否成功。 OK 表示成功。 ERROR: message 表示失败。

    示例

    mysql> SELECT audit_log_filter_remove_user('user1@localhost');
    +-------------------------------------------------+
    | audit_log_filter_remove_user('user1@localhost') |
    +-------------------------------------------------+
    | OK                                              |
    +-------------------------------------------------+
  • audit_log_filter_set_filter(filter_name, definition)

    给定一个过滤器名称和定义,将过滤器添加到当前过滤器集中。如果过滤器已经存在并且被任何当前会话使用,则这些会话将与过滤器分离,并且不再记录。这是因为新的过滤器定义具有与之前的 ID 不同的新过滤器 ID。

    参数

    • filter_name:一个字符串,指定过滤器名称。

    • definition:一个 JSON 值,指定过滤器定义。

    返回值

    一个字符串,指示操作是否成功。 OK 表示成功。 ERROR: message 表示失败。

    示例

    mysql> SET @f = '{ "filter": { "log": false } }';
    mysql> SELECT audit_log_filter_set_filter('SomeFilter', @f);
    +-----------------------------------------------+
    | audit_log_filter_set_filter('SomeFilter', @f) |
    +-----------------------------------------------+
    | OK                                            |
    +-----------------------------------------------+
  • audit_log_filter_set_user(user_name, filter_name)

    给定一个用户帐户名称和一个过滤器名称,将过滤器分配给用户。一个用户只能分配一个过滤器,因此如果用户已经分配了一个过滤器,则分配将被替换。对用户的当前会话的过滤保持不受影响。新的连接将使用新的过滤器进行过滤。

    作为一个特殊情况,名称 % 表示默认帐户。该过滤器用于来自任何没有显式分配过滤器的用户帐户的连接。

    参数

    • user_name:用户帐户名称,以 user_name@host_name 格式,或 % 表示默认帐户。

    • filter_name:一个字符串,指定过滤器名称。

    返回值

    一个字符串,指示操作是否成功。 OK 表示成功。 ERROR: message 表示失败。

    示例

    mysql> SELECT audit_log_filter_set_user('user1@localhost', 'SomeFilter');
    +------------------------------------------------------------+
    | audit_log_filter_set_user('user1@localhost', 'SomeFilter') |
    +------------------------------------------------------------+
    | OK                                                         |
    +------------------------------------------------------------+
  • audit_log_read([arg])

    读取审计日志并返回一个 JSON 字符串结果。如果审计日志格式不是 JSON,则会发生错误。

    在没有参数或 JSON 哈希参数的情况下,audit_log_read() 会从审计日志中读取事件,并返回一个包含审计事件数组的 JSON 字符串。哈希参数中的项会影响读取方式,如稍后所述。返回数组中的每个元素都是一个事件,表示为一个 JSON 哈希,但最后一个元素可能是一个 JSON null 值,以指示没有后续事件可供读取。

    当参数包含一个 JSON null 值时,audit_log_read() 会关闭当前读取序列。

    有关审计日志读取过程的更多详细信息,请参阅 第 8.4.5.6 节,“读取审计日志文件”

    参数

    要获取最新写入事件的书签,请调用 audit_log_read_bookmark()

    arg:参数是可选的。如果省略,则该函数会从当前位置读取事件。如果存在,则该参数可以是一个 JSON null 值以关闭读取序列,或一个 JSON 哈希。在哈希参数中,项是可选的,并控制读取操作的各个方面,例如开始读取的位置或要读取的事件数量。以下项很重要(其他项将被忽略)

    • start:审计日志中要读取的第一个事件的位置。该位置以时间戳的形式给出,读取从发生在时间戳值或之后的时间戳的第一个事件开始。 start 项具有以下格式,其中 value 是一个文字时间戳值

      "start": { "timestamp": "value" }
    • timestamp, id:审计日志中要读取的第一个事件的位置。 timestampid 项一起构成了一个书签,该书签唯一地标识特定事件。如果 audit_log_read() 参数包含任何一项,则必须包含这两项才能完全指定位置,否则会发生错误。

    • max_array_length:要从日志中读取的最大事件数。如果省略此项,则默认情况下会读取到日志末尾或读取缓冲区已满为止,以先发生者为准。

    要为 audit_log_read() 指定一个起始位置,请传递一个包含 start 项或包含 timestampid 项的书签的哈希参数。如果哈希参数同时包含 start 项和书签,则会发生错误。

    如果哈希参数没有指定起始位置,则会从当前位置继续读取。

    如果时间戳值不包含时间部分,则假定时间部分为 00:00:00

    返回值

    如果调用成功,返回值是一个包含审计事件数组的 JSON 字符串,或者如果将 JSON null 值作为参数传递以关闭读取序列,则为 JSON null 值。如果调用失败,则返回值为 NULL,并且会发生错误。

    示例

    mysql> SELECT audit_log_read(audit_log_read_bookmark());
    +-----------------------------------------------------------------------+
    | audit_log_read(audit_log_read_bookmark())                             |
    +-----------------------------------------------------------------------+
    | [ {"timestamp":"2020-05-18 22:41:24","id":0,"class":"connection", ... |
    +-----------------------------------------------------------------------+
    mysql> SELECT audit_log_read('null');
    +------------------------+
    | audit_log_read('null') |
    +------------------------+
    | null                   |
    +------------------------+

    注释

    在 MySQL 8.4 之前,字符串返回值可能是二进制 JSON 字符串。有关将此类值转换为非二进制字符串的信息,请参阅 第 8.4.5.6 节,“读取审计日志文件”

  • audit_log_read_bookmark()

    返回一个表示最新写入审计日志事件的书签的 JSON 字符串。如果审计日志格式不是 JSON,则会发生错误。

    书签是一个 JSON 哈希,包含 timestampid 项,用于唯一标识审计日志中事件的位置。它适合传递给 audit_log_read(),以指示该函数开始读取的位置。

    有关审计日志读取过程的更多详细信息,请参阅 第 8.4.5.6 节,“读取审计日志文件”

    参数

    无。

    返回值

    包含书签的 JSON 字符串,成功时,或失败时为 NULL 和错误。

    示例

    mysql> SELECT audit_log_read_bookmark();
    +-------------------------------------------------+
    | audit_log_read_bookmark()                       |
    +-------------------------------------------------+
    | { "timestamp": "2019-10-03 21:03:44", "id": 0 } |
    +-------------------------------------------------+

    注释

    在 MySQL 8.4 之前,字符串返回值可能是二进制 JSON 字符串。有关将此类值转换为非二进制字符串的信息,请参阅 第 8.4.5.6 节,“读取审计日志文件”

  • audit_log_rotate()

    参数

    无。

    返回值

    重命名的文件名。

    示例

    mysql> SELECT audit_log_rotate();

    使用 audit_log_rotate() 需要 AUDIT_ADMIN 权限。

审计日志选项和变量参考

表 8.44 审计日志选项和变量参考

名称 命令行 选项文件 系统变量 状态变量 变量范围 动态
audit-log
audit_log_buffer_size 全局
audit_log_compression 全局
audit_log_connection_policy 全局
audit_log_current_session 两者
Audit_log_current_size 全局
audit_log_database 全局
Audit_log_direct_writes 全局
audit_log_disable 全局
audit_log_encryption 全局
Audit_log_event_max_drop_size 全局
Audit_log_events 全局
Audit_log_events_filtered 全局
Audit_log_events_lost 全局
Audit_log_events_written 全局
audit_log_exclude_accounts 全局
audit_log_file 全局
audit_log_filter_id 两者
audit_log_flush 全局
audit_log_flush_interval_seconds 全局
audit_log_format 全局
audit_log_include_accounts 全局
audit_log_max_size 全局
audit_log_password_history_keep_days 全局
audit_log_policy 全局
audit_log_prune_seconds 全局
audit_log_read_buffer_size 两者
audit_log_rotate_on_size 全局
audit_log_statement_policy 全局
audit_log_strategy 全局
Audit_log_total_size 全局
Audit_log_write_waits 全局

审计日志选项和变量

本节介绍配置 MySQL Enterprise Audit 操作的命令选项和系统变量。如果在启动时指定的选项值不正确,则 audit_log 插件可能无法正常初始化,服务器将不会加载该插件。在这种情况下,服务器也可能产生有关其他审计日志设置的错误消息,因为它无法识别这些设置。

要配置审计日志插件的激活,请使用以下选项

如果启用审计日志插件,它将公开几个系统变量,这些变量允许控制日志记录

mysql> SHOW VARIABLES LIKE 'audit_log%';
+--------------------------------------+--------------+
| Variable_name                        | Value        |
+--------------------------------------+--------------+
| audit_log_buffer_size                | 1048576      |
| audit_log_compression                | NONE         |
| audit_log_connection_policy          | ALL          |
| audit_log_current_session            | OFF          |
| audit_log_database                   | mysql        |
| audit_log_disable                    | OFF          |
| audit_log_encryption                 | NONE         |
| audit_log_exclude_accounts           |              |
| audit_log_file                       | audit.log    |
| audit_log_filter_id                  | 0            |
| audit_log_flush                      | OFF          |
| audit_log_flush_interval_seconds     | 0            |
| audit_log_format                     | NEW          |
| audit_log_format_unix_timestamp      | OFF          |
| audit_log_include_accounts           |              |
| audit_log_max_size                   | 0            |
| audit_log_password_history_keep_days | 0            |
| audit_log_policy                     | ALL          |
| audit_log_prune_seconds              | 0            |
| audit_log_read_buffer_size           | 32768        |
| audit_log_rotate_on_size             | 0            |
| audit_log_statement_policy           | ALL          |
| audit_log_strategy                   | ASYNCHRONOUS |
+--------------------------------------+--------------+

您可以在服务器启动时设置这些变量中的任何一个,其中一些可以在运行时设置。那些仅适用于传统模式审计日志过滤器的变量将被特别指出。

  • audit_log_buffer_size

    命令行格式 --audit-log-buffer-size=#
    系统变量 audit_log_buffer_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1048576
    最小值 4096
    最大值(64 位平台) 18446744073709547520
    最大值(32 位平台) 4294967295
    单位 字节
    块大小 4096

    当审计日志插件异步将事件写入日志时,它使用一个缓冲区来存储事件内容,然后写入这些内容。此变量控制该缓冲区的大小(以字节为单位)。服务器将该值调整为 4096 的倍数。插件使用一个单一缓冲区,它在初始化时分配该缓冲区,并在终止时将其移除。插件仅在日志记录为异步时才会分配此缓冲区。

  • audit_log_compression

    命令行格式 --audit-log-compression=value
    系统变量 audit_log_compression
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 NONE
    有效值

    NONE

    GZIP

    审计日志文件的压缩类型。允许的值为 NONE(无压缩;默认值)和 GZIP(GNU Zip 压缩)。有关更多信息,请参见 压缩审计日志文件

  • audit_log_connection_policy

    命令行格式 --audit-log-connection-policy=value
    已弃用
    系统变量 audit_log_connection_policy
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 ALL
    有效值

    ALL

    ERRORS

    NONE

    注意

    此已弃用的变量仅适用于传统模式审计日志过滤(参见 第 8.4.5.10 节,“传统模式审计日志过滤”)。

    控制审计日志插件如何将其日志文件写入连接事件的策略。下表显示了允许的值。

    描述
    ALL 记录所有连接事件
    ERRORS 仅记录失败的连接事件
    NONE 不记录连接事件
    注意

    在服务器启动时,如果也指定了 audit_log_policy,则为 audit_log_connection_policy 给出的任何显式值都可能被覆盖,如 第 8.4.5.5 节,“配置审计日志记录特性” 中所述。

  • audit_log_current_session

    系统变量 audit_log_current_session
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 取决于过滤策略

    是否为当前会话启用了审计日志记录。此变量的会话值是只读的。它在会话开始时根据 audit_log_include_accountsaudit_log_exclude_accounts 系统变量的值设置。审计日志插件使用会话值来确定是否要审计该会话的事件。(存在一个全局值,但插件不使用它。)

  • audit_log_database

    命令行格式 --audit-log-database=value
    系统变量 audit_log_database
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 mysql

    指定 audit_log 插件使用哪个数据库来查找它的表。此变量是只读的。有关更多信息,请参见 第 8.4.5.2 节,“安装或卸载 MySQL Enterprise Audit”)。

  • audit_log_disable

    命令行格式 --audit-log-disable[={OFF|ON}]
    系统变量 audit_log_disable
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    允许禁用所有连接和已连接会话的审计日志记录。除了 SYSTEM_VARIABLES_ADMIN 权限之外,禁用审计日志记录还需要 AUDIT_ADMIN 权限。参见 第 8.4.5.9 节,“禁用审计日志记录”

  • audit_log_encryption

    命令行格式 --audit-log-encryption=value
    系统变量 audit_log_encryption
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 NONE
    有效值

    NONE

    AES

    审计日志文件的加密类型。允许的值为 NONE(无加密;默认值)和 AES(AES-256-CBC 密码加密)。有关更多信息,请参见 加密审计日志文件

  • audit_log_exclude_accounts

    命令行格式 --audit-log-exclude-accounts=value
    已弃用
    系统变量 audit_log_exclude_accounts
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 NULL
    注意

    此已弃用的变量仅适用于传统模式审计日志过滤(参见 第 8.4.5.10 节,“传统模式审计日志过滤”)。

    不应记录事件的帐户。该值应为 NULL 或包含一个或多个以逗号分隔的帐户名称列表的字符串。有关更多信息,请参见 第 8.4.5.7 节,“审计日志过滤”

    audit_log_exclude_accounts 的修改仅影响修改之后创建的连接,不影响现有的连接。

  • audit_log_file

    命令行格式 --audit-log-file=file_name
    系统变量 audit_log_file
    范围 全局
    动态
    SET_VAR 提示适用
    类型 文件名
    默认值 audit.log

    审计日志插件写入事件的文件的基本名称和后缀。默认值为 audit.log,与日志记录格式无关。要使名称后缀与格式相对应,请显式设置名称,选择不同的后缀(例如,audit.xml 用于 XML 格式,audit.json 用于 JSON 格式)。

    如果 audit_log_file 的值为相对路径名,则插件将相对于数据目录解释它。如果该值为完整路径名,则插件将按原样使用该值。如果希望将审计文件放置在单独的文件系统或目录中,则完整路径名可能会有用。出于安全原因,请将审计日志文件写入仅可由 MySQL 服务器以及有合法理由查看日志的用户访问的目录。

    有关审计日志插件如何解释 audit_log_file 值以及插件初始化和终止时发生的文件重命名的规则的详细信息,请参见 审计日志文件的命名约定

    审计日志插件使用包含审计日志文件的目录(从 audit_log_file 值确定)作为搜索可读审计日志文件的目录。从这些日志文件和当前文件中,插件构造一个用于审计日志书签和读取功能的日志文件列表。参见 第 8.4.5.6 节,“读取审计日志文件”

  • audit_log_filter_id

    系统变量 audit_log_filter_id
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 1
    最小值 0
    最大值 4294967295

    此变量的会话值表示当前会话的审计过滤器的内部维护 ID。值为 0 表示会话没有分配任何过滤器。

  • audit_log_flush

    系统变量 audit_log_flush
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF
    注意

    audit_log_flush 变量已弃用;预计在未来版本的 MySQL 中将删除对其的支持。它被 audit_log_rotate() 函数取代。

    如果 audit_log_rotate_on_size 为 0,则自动审计日志文件轮转功能被禁用,轮转仅在手动执行时发生。在这种情况下,通过将其设置为 1 或 ON 来启用 audit_log_flush 将导致审计日志插件关闭并重新打开其日志文件以刷新它。(变量值保持 OFF,因此您无需在再次启用它以执行另一次刷新之前明确禁用它。)有关更多信息,请参阅 第 8.4.5.5 节,“配置审计日志记录特性”

  • audit_log_flush_interval_seconds

    命令行格式 --audit-log-flush-interval-seconds[=value]
    系统变量 audit_log_flush_interval_seconds
    范围 全局
    动态
    SET_VAR 提示适用
    类型 无符号长整型
    默认值 0
    最大值(Windows) 4294967295
    最大值(其他) 18446744073709551615
    单位

    此系统变量依赖于 scheduler 组件,该组件必须已安装并启用(请参阅 第 7.5.5 节,“调度器组件”)。要检查组件的状态

    SHOW VARIABLES LIKE 'component_scheduler%';
    +-----------------------------+-------+
    | Variable_name               | Value |
    +-----------------------------+-------|
    | component_scheduler.enabled | On    |
    +-----------------------------+-------+

    audit_log_flush_interval_seconds 的值为零(默认值)时,即使 scheduler 组件已启用(ON),也不会自动刷新特权。

    060(1 到 59)之间的值不会被确认;相反,这些值会自动调整为 60,并且服务器会发出警告。大于 60 的值定义了 scheduler 组件从启动开始,或从上一次执行开始,等待多少秒,然后尝试安排另一次执行。

    要将此全局系统变量持久保存到 mysqld-auto.cnf 文件中,而不设置全局变量运行时值,请在变量名前面加上 PERSIST_ONLY 关键字或 @@PERSIST_ONLY. 限定符。

  • audit_log_format

    命令行格式 --audit-log-format=value
    系统变量 audit_log_format
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 NEW
    有效值

    OLD

    NEW

    JSON

    审计日志文件格式。允许的值是 OLD(旧式 XML)、NEW(新式 XML;默认值)和 JSON。有关每种格式的详细信息,请参阅 第 8.4.5.4 节,“审计日志文件格式”

  • audit_log_format_unix_timestamp

    命令行格式 --audit-log-format-unix-timestamp[={OFF|ON}]
    系统变量 audit_log_format_unix_timestamp
    范围 全局
    动态
    SET_VAR 提示适用
    类型 布尔值
    默认值 OFF

    此变量仅适用于 JSON 格式的审计日志输出。在这种情况下,启用此变量会导致每个日志文件记录包含一个 time 字段。该字段值是一个整数,表示表示生成审计事件的日期和时间的 UNIX 时间戳值。

    在运行时更改此变量的值会导致日志文件轮转,因此,对于给定的 JSON 格式日志文件,文件中所有记录都包含或不包含 time 字段。

    设置 audit_log_format_unix_timestamp 的运行时值需要 AUDIT_ADMIN 权限,以及通常用于设置全局系统变量运行时值的 SYSTEM_VARIABLES_ADMIN 权限(或已弃用的 SUPER 权限)。

  • audit_log_include_accounts

    命令行格式 --audit-log-include-accounts=value
    已弃用
    系统变量 audit_log_include_accounts
    范围 全局
    动态
    SET_VAR 提示适用
    类型 字符串
    默认值 NULL
    注意

    此已弃用的变量仅适用于传统模式审计日志过滤(参见 第 8.4.5.10 节,“传统模式审计日志过滤”)。

    应该记录事件的帐户。该值应为 NULL 或包含一个或多个以逗号分隔的帐户名称列表的字符串。有关更多信息,请参阅 第 8.4.5.7 节,“审计日志过滤”

    audit_log_include_accounts 的修改仅影响在修改之后创建的连接,而不影响现有连接。

  • audit_log_max_size

    命令行格式 --audit-log-max-size=#
    系统变量 audit_log_max_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值(Windows) 4294967295
    最大值(其他) 18446744073709551615
    单位 字节
    块大小 4096

    audit_log_max_size 与审计日志文件修剪有关,仅适用于 JSON 格式的日志文件。它控制基于组合日志文件大小的修剪

    • 值为 0(默认值)会禁用基于大小的修剪。没有强制执行大小限制。

    • 大于 0 的值将启用基于大小的修剪。该值是审计日志文件开始进行修剪的组合大小。

    如果您将 audit_log_max_size 设置为不是 4096 的倍数的值,它将被截断为最接近的倍数。特别是,将其设置为小于 4096 的值将其设置为 0,并且不会发生基于大小的修剪。

    如果 audit_log_max_sizeaudit_log_rotate_on_size 都大于 0,则 audit_log_max_size 应该大于 audit_log_rotate_on_size 的 7 倍。否则,将向服务器错误日志写入警告,因为在这种情况下,基于大小的修剪的“粒度”可能不足以防止每次发生时删除所有或大多数轮转的日志文件。

    注意

    仅设置 audit_log_max_size 不足以导致日志文件修剪发生,因为修剪算法联合使用 audit_log_rotate_on_sizeaudit_log_max_sizeaudit_log_prune_seconds。有关详细信息,请参阅 审计日志文件空间管理

  • audit_log_password_history_keep_days

    命令行格式 --audit-log-password-history-keep-days=#
    系统变量 audit_log_password_history_keep_days
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 4294967295
    单位

    审计日志插件使用存储在 MySQL 密钥环中的加密密码来实现日志文件加密(请参阅 加密审计日志文件)。该插件还实现了密码历史记录,其中包括密码存档和过期(删除)。

    当审计日志插件创建新的加密密码时,它会存档上一个密码(如果存在)以备将来使用。 audit_log_password_history_keep_days 变量控制过期存档密码的自动删除。它的值表示存档的审计日志加密密码被删除的天数。默认值为 0,禁用密码过期:密码保留期为永远。

    在以下情况下会创建新的审计日志加密密码

    • 在插件初始化期间,如果插件发现日志文件加密已启用,它会检查密钥环是否包含审计日志加密密码。如果没有,插件会自动生成一个随机的初始加密密码。

    • 当调用 audit_log_encryption_password_set() 函数以设置特定密码时。

    在每种情况下,插件都会将新密码存储在密钥环中,并使用它来加密新的日志文件。

    过期审计日志加密密码的删除会在以下情况下发生

    • 在插件初始化期间。

    • 当调用 audit_log_encryption_password_set() 函数时。

    • audit_log_password_history_keep_days 的运行时值从其当前值更改为大于 0 的值时。运行时值更改发生在使用 GLOBALPERSIST 关键字(但不是 PERSIST_ONLY 关键字)的 SET 语句中。 PERSIST_ONLY 会将变量设置写入 mysqld-auto.cnf,但不会影响运行时值。

    当密码删除发生时, audit_log_password_history_keep_days 的当前值决定要删除哪些密码

    • 如果值为 0,插件不会删除任何密码。

    • 如果值为 N > 0,则插件会删除超过 N 天的密码。

    注意

    注意不要使仍然需要读取存档加密日志文件的旧密码过期。

    如果您通常让密码过期禁用(即 audit_log_password_history_keep_days 的值为 0),则可以通过暂时为变量分配大于零的值来执行按需清理操作。例如,要使超过 365 天的密码过期,请执行以下操作

    SET GLOBAL audit_log_password_history_keep_days = 365;
    SET GLOBAL audit_log_password_history_keep_days = 0;

    设置 audit_log_password_history_keep_days 的运行时值需要 AUDIT_ADMIN 权限,以及通常用于设置全局系统变量运行时值的 SYSTEM_VARIABLES_ADMIN 权限(或已弃用的 SUPER 权限)。

  • audit_log_policy

    命令行格式 --audit-log-policy=value
    已弃用
    系统变量 audit_log_policy
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 ALL
    有效值

    ALL

    LOGINS

    QUERIES

    NONE

    注意

    此已弃用的变量仅适用于传统模式审计日志过滤(参见 第 8.4.5.10 节,“传统模式审计日志过滤”)。

    控制审计日志插件如何将事件写入其日志文件的策略。下表显示了允许的值。

    描述
    ALL 记录所有事件
    LOGINS 仅记录登录事件
    QUERIES 仅记录查询事件
    NONE 不记录任何内容(禁用审计流)

    audit_log_policy 只能在服务器启动时设置。在运行时,它是一个只读变量。另外两个系统变量,audit_log_connection_policyaudit_log_statement_policy,提供了对日志记录策略的更精细控制,可以在启动时或运行时设置。如果您在启动时使用 audit_log_policy 而不是其他两个变量,则服务器会使用其值来设置这些变量。有关策略变量及其交互的更多信息,请参阅 第 8.4.5.5 节,“配置审计日志记录特性”

  • audit_log_prune_seconds

    命令行格式 --audit-log-prune-seconds=#
    系统变量 audit_log_prune_seconds
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值(Windows) 4294967295
    最大值(其他) 18446744073709551615
    单位 字节

    audit_log_prune_seconds 与审计日志文件修剪有关,仅适用于 JSON 格式的日志文件。它控制基于日志文件年龄的修剪

    • 值为 0(默认值)会禁用基于年龄的修剪。没有强制执行年龄限制。

    • 大于 0 的值将启用基于年龄的修剪。该值是审计日志文件开始进行修剪的秒数。

    注意

    单独设置 audit_log_prune_seconds 并不足以导致日志文件修剪,因为修剪算法会将 audit_log_rotate_on_sizeaudit_log_max_sizeaudit_log_prune_seconds 结合使用。有关详细信息,请参见 审计日志文件空间管理

  • audit_log_read_buffer_size

    命令行格式 --audit-log-read-buffer-size=#
    系统变量 audit_log_read_buffer_size
    范围 全局,会话
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 32768
    最小值 32768
    最大值 4194304
    单位 字节

    从审计日志文件读取的缓冲区大小(以字节为单位)。audit_log_read() 函数最多读取这么多字节。日志文件读取仅支持 JSON 日志格式。有关更多信息,请参见 第 8.4.5.6 节,“读取审计日志文件”

    此变量的默认值为 32KB,可以在运行时设置。每个客户端都应适当地设置其 audit_log_read_buffer_size 的会话值,以使用 audit_log_read()

  • audit_log_rotate_on_size

    命令行格式 --audit-log-rotate-on-size=#
    系统变量 audit_log_rotate_on_size
    范围 全局
    动态
    SET_VAR 提示适用
    类型 整数
    默认值 0
    最小值 0
    最大值 18446744073709551615
    单位 字节
    块大小 4096

    如果 audit_log_rotate_on_size 为 0,则审计日志插件不会执行基于大小的自动日志文件轮转。如果要进行轮转,则必须手动执行;请参见 手动审计日志文件轮转

    如果 audit_log_rotate_on_size 大于 0,则会发生基于大小的自动日志文件轮转。每当写入日志文件导致其大小超过 audit_log_rotate_on_size 值时,审计日志插件都会重命名当前日志文件并使用原始名称打开新的当前日志文件。

    如果您将 audit_log_rotate_on_size 设置为不是 4096 的倍数的值,则它将被截断到最接近的倍数。特别是,将其设置为小于 4096 的值会将其设置为 0,并且除了手动之外,不会进行轮转。

    注意

    audit_log_rotate_on_size 控制审计日志文件是否进行轮转。它还可以与 audit_log_max_sizeaudit_log_prune_seconds 结合使用,以配置已轮转的 JSON 格式日志文件的修剪。有关详细信息,请参见 审计日志文件空间管理

  • audit_log_statement_policy

    命令行格式 --audit-log-statement-policy=value
    已弃用
    系统变量 audit_log_statement_policy
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 ALL
    有效值

    ALL

    ERRORS

    NONE

    注意

    此已弃用的变量仅适用于传统模式审计日志过滤(参见 第 8.4.5.10 节,“传统模式审计日志过滤”)。

    控制审计日志插件如何将语句事件写入其日志文件的策略。下表显示了允许的值。

    描述
    ALL 记录所有语句事件
    ERRORS 仅记录失败的语句事件
    NONE 不记录语句事件
    注意

    在服务器启动时,如果还指定了 audit_log_policy,则可能覆盖为 audit_log_statement_policy 给出的任何显式值,如 第 8.4.5.5 节,“配置审计日志记录特性” 中所述。

  • audit_log_strategy

    命令行格式 --audit-log-strategy=value
    系统变量 audit_log_strategy
    范围 全局
    动态
    SET_VAR 提示适用
    类型 枚举
    默认值 ASYNCHRONOUS
    有效值

    ASYNCHRONOUS

    PERFORMANCE

    SEMISYNCHRONOUS

    SYNCHRONOUS

    审计日志插件使用的日志记录方法。允许使用以下策略值

    • ASYNCHRONOUS:异步记录。等待输出缓冲区中的空间。

    • PERFORMANCE:异步记录。放弃输出缓冲区中空间不足的请求。

    • SEMISYNCHRONOUS:同步记录。允许操作系统缓存。

    • SYNCHRONOUS:同步记录。在每个请求后调用 sync()

审计日志状态变量

如果启用了审计日志插件,它将公开几个状态变量,这些变量提供操作信息。这些变量可用于传统模式审计筛选(已弃用)和 JSON 模式审计筛选。