Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


8.4.5.11 审计日志参考

以下部分提供了 MySQL Enterprise Audit 元素的参考:

要安装审计日志表和函数,请按照第 8.4.5.2 节,“安装或卸载 MySQL Enterprise Audit”中的说明进行操作。除非已经安装了这些对象,audit_log 插件将在(已弃用)遗留模式下运行。请参阅第 8.4.5.10 节,“遗留模式审计日志过滤”

Audit Log 表

MySQL Enterprise Audit 使用 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 密钥环中获取 audit 日志加密密码,必须启用密钥环或发生错误。任何密钥环组件或插件都可以使用;请参阅第8.4.4节,“MySQL 密钥环”

    无参数时,函数检索当前加密密码作为二进制字符串。可以给出参数指定要检索的 audit 日志加密密码;参数必须是当前密码或存档密码的密钥环 ID。

    关于 audit 日志加密的更多信息,请参阅加密 Audit 日志文件

    参数:

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

    返回值:

    成功时返回加密字符串(最长 766 字节),失败时返回 NULL 和错误信息。

    示例:

    检索当前密码:

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

    要通过 ID 检索密码,可以查询性能 Schema keyring_keys 表:

    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 密钥ring 中。密码以 utf8mb4 字符串形式存储。之前,密码以二进制形式存储。

    如果加密已启用,这个函数执行日志文件旋转操作,重命名当前日志文件,并开始使用密码加密的新日志文件。密钥ring 必须启用否则会出现错误。任何密钥ring 组件或插件都可以使用;请参阅第8.4.4节,“MySQL 密钥ring”

    关于审核日志加密的详细信息,请参阅审核日志文件加密

    参数:

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

    返回值:

    1 成功,0 失败。

    示例:

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

    调用其他过滤函数将立即影响操作日志 filtering,并更新 audit 日志表。如果您使用语句,如INSERTUPDATEDELETE修改那些表的内容,变化不会立即生效。要使更改生效,请调用audit_log_filter_flush()

    Warning

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

    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表中被移除)。过滤终止包括当前会话:它们将被从过滤器中detach,并且不再记录。

    参数:

    • 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。

    参数:

    • 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: <em class="replaceable"><code>message</code></em> 表示失败。

    示例:

    mysql> SELECT audit_log_filter_set_user('user1@localhost', 'SomeFilter');
    +------------------------------------------------------------+
    | audit_log_filter_set_user('user1@localhost', 'SomeFilter') |
    +------------------------------------------------------------+
    | OK                                                         |
    +------------------------------------------------------------+
  • audit_log_read([<em class="replaceable"><code>arg</code></em>])

    读取审核日志并返回一个JSON字符串结果。如果审核日志格式不是JSON

    没有参数或 JSON 哈希参数时,audit_log_read() 读取审核日志并返回一个JSON字符串,包含审核事件数组。哈希参数中的项目影响读取方式,如后文所述。返回数组中的每个元素都是事件,除最后一个可能是JSON null 值,以表示没有更多可读事件。

    使用一个JSONnull值作为参数时,audit_log_read()关闭当前读取序列。

    关于审核日志阅读过程的详细信息,请参见第8.4.5.6节,“阅读审核日志文件”

    参数:

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

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

    • start:在审核日志中事件的起始位置。起始位置以时间戳形式给出,读取从起始于或晚于该时间戳值的第一个事件开始。start项目具有以下格式,其中value是字面量时间戳值:

      "start": { "timestamp": "value" }
    • timestamp, id: 在审核日志中的事件读取位置。timestampid 项一起组成一个唯一标识某个事件的书签。如果audit_log_read() 函数参数包括其中任何一项,它必须包括两个来完全指定位置或发生错误。

    • max_array_length: 从日志中读取事件的最大数量。如果省略该项,默认情况下直到日志末尾或读取缓冲区满,先到者为止。

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

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

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

    返回值:

    示例:

    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 审核日志选项和变量参考

Name Cmd-Line Option File System Var Status Var Var Scope Dynamic
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 命令选项和系统变量,配置 MySQL Enterprise Audit 的操作。如果在启动时指定的值不正确,audit_log 插件可能无法初始化properly,并且服务器也不会加载它。在这种情况下,服务器还可能会产生其他 audit 日志设置错误信息。

要配置 audit 日志插件的激活,可以使用以下选项:

如果启用了审核日志插件,它将暴露一些系统变量,用于控制日志记录:

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

    Command-Line Format --audit-log-buffer-size=#
    System Variable audit_log_buffer_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 1048576
    Minimum Value 4096
    Maximum Value (64-bit platforms) 18446744073709547520
    Maximum Value (32-bit platforms) 4294967295
    Unit 字节
    Block Size 4096

    当 audit 日志插件异步写入事件到日志时,它使用缓冲区存储事件内容,直到将其写入。这个变量控制该缓冲区的大小,以字节为单位。服务器会将值调整为4096的倍数。插件只在初始化和终止时分配该缓冲区,并且只在异步日志时分配。

  • audit_log_compression

    Command-Line Format --audit-log-compression=value
    System Variable audit_log_compression
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value NONE
    Valid Values

    NONE

    GZIP

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

  • audit_log_connection_policy

    Command-Line Format --audit-log-connection-policy=value
    Deprecated
    System Variable audit_log_connection_policy
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value ALL
    Valid Values

    ALL

    ERRORS

    NONE

    Note

    这个已弃用的变量只适用于遗留模式审核日志过滤(见第8.4.5.10节,“遗留模式审核日志过滤”)。

    审核日志插件写入连接事件到日志文件的策略。以下表格显示允许的值。

    Value Description
    ALL 记录所有连接事件
    ERRORS 仅记录失败的连接事件
    NONE 不记录连接事件
    Note

    服务器启动时,任何对audit_log_connection_policy的明确值可能会被override,如果同时指定了audit_log_policy,如第8.4.5.5节,“配置审核日志特性”中所述。

  • audit_log_current_session

    System Variable audit_log_current_session
    Scope 全局,会话
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value 取决于过滤策略

    当前会话是否启用审核日志记录。该变量的会话值只读,设置时基于audit_log_include_accountsaudit_log_exclude_accounts系统变量的值。审核日志插件使用会话值来确定是否对会话事件进行审核。(存在全局值,但插件不使用它。)

  • audit_log_database

    Command-Line Format --audit-log-database=value
    System Variable audit_log_database
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value mysql

    指定audit_log插件用于查找表的数据库。这個变量是只读的。更多信息,请参见第8.4.5.2节,“安装或卸载MySQL企业审核”

  • audit_log_disable

    Command-Line Format --audit-log-disable[={OFF|ON}]
    System Variable audit_log_disable
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    允许对所有连接和已连接的会话禁用审核日志。除了SYSTEM_VARIABLES_ADMIN特权外,禁用审核日志还需要AUDIT_ADMIN特权。请参见第8.4.5.9节,“禁用审核日志”

  • audit_log_encryption

    Command-Line Format --audit-log-encryption=value
    System Variable audit_log_encryption
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value NONE
    Valid Values

    NONE

    AES

    审核日志文件的加密类型。允许的值是 NONE(无加密;默认)和 AES(AES-256-CBC 加密算法)。更多信息,请参见审核日志文件加密

  • audit_log_exclude_accounts

    Command-Line Format --audit-log-exclude-accounts=value
    Deprecated
    System Variable audit_log_exclude_accounts
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value NULL
    Note

    这个已弃用的变量仅适用于遗留模式的审核日志过滤(见第8.4.5.10节,“遗留模式审核日志过滤”)。

    不应该被记录的帐户。值应为NULL或包含一个或多个逗号分隔的帐户名称字符串。更多信息,请见第8.4.5.7节,“审核日志过滤”

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

  • audit_log_file

    Command-Line Format --audit-log-file=file_name
    System Variable audit_log_file
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 文件名
    Default Value audit.log

    审核日志插件写入事件的文件基础名称和后缀。默认值为audit.logaudit.xml用于XML格式,audit.json用于JSON格式)。

    如果audit_log_file的值是一个相对路径名,插件将其解释为数据目录相对路径。如果值是全路径名,插件使用该值不变。全路径名可能有助于将审核日志文件存储在独立的文件系统或目录中。出于安全原因,务必将审核日志文件写入只能被 MySQL 服务器和具有合法理由查看日志的用户访问的目录。

    关于插件如何解释audit_log_file值和初始化和终止时文件重命名规则,见审核日志文件命名约定

    审核日志插件使用包含审核日志文件的目录(由audit_log_file值确定)来搜索可读审核日志文件。从这些日志文件和当前文件中,插件构建一个可以与审核日志书签和阅读函数使用的列表。见第8.4.5.6节,“阅读审核日志文件”

  • audit_log_filter_id

    System Variable audit_log_filter_id
    Scope 全局
    Dynamic 会话
    SET_VAR Hint Applies
    Type 整数
    Default Value 1
    Minimum Value 0
    Maximum Value 4294967295

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

  • audit_log_flush

    System Variable audit_log_flush
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF
    Note

    变量audit_log_flush 已弃用,未来 MySQL 版本中将删除;它已被audit_log_rotate() 函数所取代。

    如果audit_log_rotate_on_size为 0,自动审核日志文件旋转被禁用,仅在手动进行时发生。那么,启用audit_log_flush,将使审核日志插件关闭并重新打开日志文件以刷新它(变量值仍然为OFF,因此在下次刷新前不需要明确禁用)。更多信息,请参见第8.4.5.5节,“配置审核日志特性”

  • audit_log_flush_interval_seconds

    Command-Line Format --audit-log-flush-interval-seconds[=value]
    System Variable audit_log_flush_interval_seconds
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 无符号长整数
    Default Value 0
    Maximum Value (Windows) 4294967295
    Maximum Value (Other) 18446744073709551615
    Unit

    这个系统变量依赖于scheduler组件,必须安装并启用(见第7.5.5节,“调度器组件”)。要检查组件状态:

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

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

    0到60之间的值不被认可,而是自动调整到60,服务器会发出警告。超过60的值定义了scheduler组件从启动或上一次执行开始等待多少秒后再次尝试执行。

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

  • audit_log_format

    Command-Line Format --audit-log-format=value
    System Variable audit_log_format
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value NEW
    Valid Values

    OLD

    NEW

    JSON

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

  • audit_log_format_unix_timestamp

    Command-Line Format --audit-log-format-unix-timestamp[={OFF|ON}]
    System Variable audit_log_format_unix_timestamp
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 布尔值
    Default Value OFF

    这个变量只适用于JSON格式的审计日志输出。当该变量启用时,每个日志文件记录将包括一个time字段。该字段值是一个表示 audit 事件生成日期和时间的 UNIX 时间戳整数。

    在运行时更改这个变量的值将导致日志文件旋转,以便于给定的 JSON 格式日志文件中的所有记录都包含或不包含time字段。

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

  • audit_log_include_accounts

    Command-Line Format --audit-log-include-accounts=value
    Deprecated
    System Variable audit_log_include_accounts
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 字符串
    Default Value NULL
    Note

    这个已弃用的变量只适用于遗留模式的审核日志过滤(见第8.4.5.10节,“遗留模式审核日志过滤”)。

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

    修改audit_log_include_accounts只影响创建于修改后连接,不影响现有连接。

  • audit_log_max_size

    Command-Line Format --audit-log-max-size=#
    System Variable audit_log_max_size
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value (Windows) 4294967295
    Maximum Value (Other) 18446744073709551615
    Unit 字节
    Block Size 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倍。否则,服务器错误日志中将写入警告,因为在这种情况下基于大小的截断可能不足以防止每次都删除所有或大多数旋转日志文件。

    Note

    单独设置audit_log_max_size不能导致日志文件截断,因为截断算法同时使用audit_log_rotate_on_sizeaudit_log_max_sizeaudit_log_prune_seconds。详细信息,请参见审核日志文件空间管理

  • audit_log_password_history_keep_days

    Command-Line Format --audit-log-password-history-keep-days=#
    System Variable audit_log_password_history_keep_days
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 4294967295
    Unit

    审计日志插件使用 MySQL 密钥ring 中存储的加密密码来实现日志文件加密(见加密审计日志文件)。插件还实现了密码历史记录,包括密码归档和过期(删除)。

    当审计日志插件创建新加密密码时,它将存档之前的密码,如果存在,用于后续使用。变量audit_log_password_history_keep_days控制自动删除过期归档加密密码的时间。其值表示归档加密审计日志密码的删除天数。默认为 0,禁用密码过期:密码保留期限是永久。

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

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

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

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

    过期的 audit 日志加密密码的删除发生在以下情况下:

    • 插件初始化期间。

    • audit_log_encryption_password_set()函数被调用时。

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

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

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

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

    Note

    不要让过期的密码还需要读取归档加密日志文件。

    如果您通常不启用密码过期功能(即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

    Command-Line Format --audit-log-policy=value
    Deprecated
    System Variable audit_log_policy
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value ALL
    Valid Values

    ALL

    LOGINS

    QUERIES

    NONE

    Note

    这个已弃用的变量只适用于遗留模式审核日志过滤(见第8.4.5.10节,“遗留模式审核日志过滤”).

    审核日志插件写入事件到日志文件的策略。下表显示了允许的值。

    Value Description
    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

    Command-Line Format --audit-log-prune-seconds=#
    System Variable audit_log_prune_seconds
    Scope Global
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value (Windows) 4294967295
    Maximum Value (Other) 18446744073709551615
    Unit 字节

    audit_log_prune_seconds 只适用于 JSON 格式的日志文件,控制基于日志文件年龄的剪辑:

    • 值为 0(默认)禁用基于年龄的剪辑,不强制执行年龄限制。

    • 值大于 0 启用基于年龄的剪辑,值是 audit 日志文件在成为剪辑对象后的秒数。

    Note

    单独设置audit_log_prune_seconds 不足以导致日志文件剪辑,因为剪辑算法同时使用 audit_log_rotate_on_sizeaudit_log_max_sizeaudit_log_prune_seconds。详细信息,请参见Audit 日志文件空间管理

  • audit_log_read_buffer_size

    Command-Line Format --audit-log-read-buffer-size=#
    System Variable audit_log_read_buffer_size
    Scope 全局
    Dynamic 会话
    SET_VAR Hint Applies
    Type 整数
    Default Value 32768
    Minimum Value 32768
    Maximum Value 4194304
    Unit 字节

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

    这个变量的默认值为32KB,可以在运行时设置。每个客户端应该根据自己的使用情况设置audit_log_read_buffer_size会话值,以便使用audit_log_read()

  • audit_log_rotate_on_size

    Command-Line Format --audit-log-rotate-on-size=#
    System Variable audit_log_rotate_on_size
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 整数
    Default Value 0
    Minimum Value 0
    Maximum Value 18446744073709551615
    Unit 字节
    Block Size 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,除非手动旋转。

    Note

    audit_log_rotate_on_size 控制是否发生审核日志文件旋转。它也可以与audit_log_max_sizeaudit_log_prune_seconds 一起使用,以配置旋转的 JSON 格式日志文件的清理。详细信息,请见审核日志文件空间管理

  • audit_log_statement_policy

    Command-Line Format --audit-log-statement-policy=value
    Deprecated
    System Variable audit_log_statement_policy
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value ALL
    Valid Values

    ALL

    ERRORS

    NONE

    Note

    这个已弃用的变量只适用于遗留模式审核日志过滤(见第8.4.5.10节,“遗留模式审核日志过滤”)。

    控制 audit 日志插件将语句事件写入日志文件的策略。以下表格显示了允许的值。

    Value Description
    ALL 记录所有语句事件
    ERRORS 只记录失败的语句事件
    NONE 不记录语句事件
    Note

    服务器启动时,任何明确指定的audit_log_statement_policy值可能会被override,如果同时指定audit_log_policy,如第8.4.5.5节,“配置 audit 日志特性”中所述。

  • audit_log_strategy

    Command-Line Format --audit-log-strategy=value
    System Variable audit_log_strategy
    Scope 全局
    Dynamic
    SET_VAR Hint Applies
    Type 枚举
    Default Value ASYNCHRONOUS
    Valid Values

    ASYNCHRONOUS

    PERFORMANCE

    SEMISYNCHRONOUS

    SYNCHRONOUS

    审计日志插件使用的日志方法。这些策略值是允许的:

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

    • 性能: 异步记录。对于输出缓冲区中无足够空间的请求,直接丢弃。

    • 半同步: 同步记录。允许操作系统进行缓存。

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

如果启用了审计日志插件,它暴露了一些状态变量,提供操作信息。这些变量适用于遗留模式的审计过滤(已弃用)和 JSON 模式的审计过滤。