以下部分提供了 MySQL Enterprise Audit 元素的参考:
要安装审计日志表和函数,请使用 第 8.4.5.2 节,「安装或卸载 MySQL Enterprise Audit」 中提供的说明。除非这些对象被安装,否则 audit_log
插件将在(已弃用)遗留模式下操作。请参阅 第 8.4.5.10 节,「遗留模式审计日志过滤」。
MySQL Enterprise Audit 使用 mysql
系统数据库中的表来存储过滤器和用户帐户数据。这些表只能被具有该数据库权限的用户访问。要使用不同的数据库,请在服务器启动时设置 audit_log_database
系统变量。这些表使用 InnoDB
存储引擎。
如果这些表不存在,audit_log
插件将在(已弃用)遗留模式下操作。请参阅 第 8.4.5.10 节,「遗留模式审计日志过滤」。
The audit_log_filter
表存储过滤器定义。该表具有以下列:
-
NAME
过滤器名称。
-
FILTER
与过滤器名称关联的过滤器定义。定义存储为
JSON
值。
The audit_log_user
表存储用户帐户信息。该表具有以下列:
-
USER
帐户的用户名部分。例如,对于帐户
user1@localhost
,用户名部分是user1
。 -
HOST
帐户的主机名部分。例如,对于帐户
user1@localhost
,主机名部分是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 检索密码,可以通过查询性能模式
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(
密码
)将当前审核日志加密密码设置为参数,并将密码存储在 MySQL 密钥环中。密码以
utf8mb4
字符串形式存储。以前,密码以二进制形式存储。如果启用了加密,则该函数执行日志文件轮换操作,重命名当前日志文件,并以密码加密开始新的日志文件。密钥环必须启用,否则将发生错误。任何密钥环组件或插件都可以使用;有关说明,请参阅第 8.4.4 节,“MySQL 密钥环”。
有关审核日志加密的更多信息,请参阅加密审核日志文件。
参数:
密码
:密码字符串。最大允许长度为 766 字节。返回值:
成功返回 1,失败返回 0。
示例:
mysql> SELECT audit_log_encryption_password_set(password); +---------------------------------------------+ | audit_log_encryption_password_set(password) | +---------------------------------------------+ | 1 | +---------------------------------------------+
-
调用任何其他过滤函数都会立即影响操作审核日志过滤,并更新审核日志表。如果您直接修改这些表的内容,例如使用
INSERT
、UPDATE
和DELETE
语句,变化不会立即影响过滤。要刷新更改并使其生效,请调用audit_log_filter_flush()
。Warningaudit_log_filter_flush()
应该仅在直接修改审核表时使用,以强制重新加载所有过滤器。否则,该函数应该避免使用。它实际上是卸载和重新加载audit_log
插件的简化版本,使用INSTALL 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
表中删除)。过滤的终止包括当前会话:它们将从过滤器中分离,并且不再记录。参数:
-
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 与其之前的 ID 不同。
参数:
-
filter_name
:一个字符串,指定过滤器名称。 -
定义
: 一个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 | +------------------------------------------------------------+
-
-
读取审核日志并返回一个
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
:审核日志中要读取的第一个事件的位置。该timestamp
和id
项目共同组成了一个唯一标识特定事件的书签。如果audit_log_read()
参数包括其中一个项目,必须包括两个以完全指定一个位置,否则将发生错误。 -
max_array_length
:从日志中读取的最大事件数。如果省略该项目,默认是读取到日志结尾或读取缓冲区满,ichever 先发生。
要指定
audit_log_read()
的起始位置,请传递一个哈希参数,该参数包括一个start
项目或一个由timestamp
和id
项目组成的书签。如果哈希参数包括这两个项目,将发生错误。如果哈希参数未指定起始位置,读取将从当前位置继续。
如果时间戳值不包括时间部分,将假设时间部分为
00:00:00
。返回值:
如果调用成功,返回值是一个包含审核事件数组的
JSON
字符串,或者是一个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.3 之前,字符串返回值可以是二进制
JSON
字符串。有关将这些值转换为非二进制字符串的信息,请参见 第 8.4.5.6 节,“读取审计日志文件”。 -
-
返回一个表示最新写入审计日志事件的书签的
JSON
字符串。如果审计日志格式不是JSON
,则发生错误。该书签是一个
JSON
哈希表,包含timestamp
和id
项,唯一标识审计日志中的事件位置。它适合传递给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.3 之前,字符串返回值可以是二进制
JSON
字符串。有关将这些值转换为非二进制字符串的信息,请参见 第 8.4.5.6 节,“读取审计日志文件”。 -
参数:
无。
返回值:
重命名的文件名。
示例:
mysql> SELECT audit_log_rotate();
使用
audit_log_rotate()
需要AUDIT_ADMIN
权限。
表 8.46 审计日志选项和变量参考
本节描述了 MySQL 企业审核的命令选项和系统变量,以配置审核日志的操作。如果启动时指定的值不正确,audit_log
插件可能无法正确初始化,服务器也不会加载它。在这种情况下,服务器也可能会为其他审核日志设置生成错误消息,因为它不认识它们。
要配置审核日志插件的激活,请使用以下选项:
-
命令行格式 --audit-log[=值]
类型 枚举 默认值 ON
有效值 ON
OFF
FORCE
FORCE_PLUS_PERMANENT
该选项控制服务器在启动时如何加载
audit_log
插件。它仅在插件之前注册了INSTALL PLUGIN
或加载了--plugin-load
或--plugin-load-add
时可用。请参阅 第 8.4.5.2 节,“安装或卸载 MySQL 企业审核”。选项值应为插件加载选项之一,如 第 7.6.1 节,“安装和卸载插件” 所述。例如,
--audit-log=FORCE_PLUS_PERMANENT
告诉服务器加载插件并防止其在服务器运行时被删除。
如果审核日志插件启用了,它会公开几个系统变量,以控制日志记录:
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
作用域 全局 动态 否 SET_VAR
提示应用否 类型 整数 默认值 1048576
最小值 4096
最大值(64 位平台) 18446744073709547520
最大值(32 位平台) 4294967295
单位 字节 块大小 4096
当审核日志插件异步写入事件到日志时,它使用缓冲区来存储事件内容,然后写入日志。该变量控制该缓冲区的大小,以字节为单位。服务器将该值调整为 4096 的倍数。插件在初始化时分配该缓冲区,并在终止时释放该缓冲区。只有在异步日志记录时,插件才分配该缓冲区。
-
命令行格式 --audit-log-compression=value
系统变量 audit_log_compression
作用域 全局 动态 否 SET_VAR
提示应用否 类型 枚举 默认值 NONE
有效值 NONE
GZIP
审核日志文件的压缩类型。允许的值是
NONE
(无压缩,默认)和GZIP
(GNU Zip 压缩)。有关更多信息,请参阅 压缩审核日志文件。 -
命令行格式 --audit-log-connection-policy=value
已弃用 是 系统变量 audit_log_connection_policy
作用域 全局 动态 是 SET_VAR
提示应用否 类型 枚举 默认值 ALL
有效值 ALL
ERRORS
NONE
Note该已弃用的变量仅适用于遗留模式审核日志过滤(见 第 8.4.5.10 节,“遗留模式审核日志过滤”)。
控制审核日志插件如何将连接事件写入其日志文件的策略。下表显示了允许的值。
值 描述 ALL
记录所有连接事件 ERRORS
仅记录失败的连接事件 NONE
不记录连接事件 Note在服务器启动时,任何明确指定的
audit_log_connection_policy
值可能会被覆盖,如果audit_log_policy
也被指定,如 第 8.4.5.5 节,“配置审核日志特性” 中所述。 -
系统变量 audit_log_current_session
作用域 全局、会话 动态 否 SET_VAR
提示应用否 类型 布尔值 默认值 取决于过滤策略
是否启用当前会话的审核日志记录。会话值是只读的,它是在会话开始时根据
audit_log_include_accounts
和audit_log_exclude_accounts
系统变量的值设置的。审核日志插件使用会话值来确定是否审核会话事件。(有一个全局值,但插件不使用它。) -
命令行格式 --audit-log-database=value
系统变量 audit_log_database
作用域 全局 动态 否 SET_VAR
提示应用否 类型 字符串 默认值 mysql
指定审核日志插件使用的数据库。该变量是只读的。有关更多信息,请参阅第 8.4.5.2 节,“安装或卸载 MySQL 企业审核”。
-
命令行格式 --audit-log-disable[={OFF|ON}]
系统变量 audit_log_disable
作用域 全局 动态 是 SET_VAR
提示应用否 类型 布尔值 默认值 OFF
允许禁用所有连接和连接会话的审核日志记录。此外,还需要
SYSTEM_VARIABLES_ADMIN
权限和AUDIT_ADMIN
权限。请参阅 第 8.4.5.9 节,“禁用审核日志记录”。 -
命令行格式 --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
作用域 全局 动态 是 SET_VAR
提示应用否 类型 字符串 默认值 NULL
Note该已弃用的变量仅适用于遗留模式审核日志过滤(见 第 8.4.5.10 节,“遗留模式审核日志过滤”)。
这些事件不应记录的账户。该值应为
NULL
或包含一个或多个逗号分隔的账户名称的字符串。有关更多信息,请参阅 第 8.4.5.7 节,“审核日志过滤”。对
audit_log_exclude_accounts
的修改仅影响后续创建的连接,而不影响现有的连接。 -
命令行格式 --audit-log-file=文件名
系统变量 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
作用域 全局、会话 动态 否 SET_VAR
提示应用否 类型 整数 默认值 1
最小值 0
最大值 4294967295
该变量的会话值表示当前会话的审计过滤器的内部维护 ID。如果值为 0,则表示会话没有分配过滤器。
-
系统变量 audit_log_flush
作用域 全局 动态 是 SET_VAR
提示应用否 类型 布尔值 默认值 OFF
Note从 MySQL 8.0.31 开始,
audit_log_flush
变量已弃用;预计在未来版本的 MySQL 中将删除对其的支持。它被audit_log_rotate() 函数所取代。如果
audit_log_rotate_on_size
为 0,则自动审核日志文件轮换被禁用,仅在手动执行时进行轮换。在这种情况下,启用audit_log_flush
通过将其设置为 1 或ON
导致审核日志插件关闭并重新打开其日志文件以刷新它。(变量值保持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 节,“Scheduler 组件”)。要检查组件的状态:SHOW VARIABLES LIKE 'component_scheduler%'; +-----------------------------+-------+ | Variable_name | Value | +-----------------------------+-------| | component_scheduler.enabled | On | +-----------------------------+-------+
当
audit_log_flush_interval_seconds
的值为零(默认值)时,即使scheduler
组件启用(ON
),也不会发生自动刷新权限。值在
0
和60
之间(1 到 59)不被确认;相反,这些值将自动调整为60
,服务器将发出警告。值大于60
定义了scheduler
组件从启动或从上一次执行开始等待的秒数,直到它尝试安排另一个执行。要将该全局系统变量持久化到
mysqld-auto.cnf
文件中,而不设置全局变量的运行时值,请在变量名前加上PERSIST_ONLY
关键字或@@PERSIST_ONLY.
限定符。 -
命令行格式 --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 格式的审核日志输出。当该变量为 true 时,启用该变量将导致每个日志文件记录包含一个
time
字段。该字段值是一个整数,表示审核事件生成的 UNIX 时间戳。在运行时更改该变量的值将导致日志文件轮换,以便在给定的 JSON 格式日志文件中,所有记录都包含或不包含
time
字段。设置
audit_log_format_unix_timestamp
的运行时值需要AUDIT_ADMIN
权限,除了通常需要设置全局系统变量运行时值的SYSTEM_VARIABLES_ADMIN
权限(或已弃用的SUPER
权限). -
命令行格式 --audit-log-include-accounts=value
已弃用 是 系统变量 audit_log_include_accounts
作用域 全局 动态 是 SET_VAR
提示应用否 类型 字符串 默认值 NULL
Note该弃用变量仅适用于遗留模式审核日志过滤(见第 8.4.5.10 节,“遗留模式审核日志过滤”).
应记录事件的账户。该值应为
NULL
或包含一个或多个以逗号分隔的账户名称的字符串。有关更多信息,请参见第 8.4.5.7 节,“审核日志过滤”。对
audit_log_include_accounts
的修改仅影响创建于修改后的连接,而不影响现有连接。 -
命令行格式 --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_size
和audit_log_rotate_on_size
都大于 0,audit_log_max_size
应该大于audit_log_rotate_on_size
的 7 倍。否则,将在服务器错误日志中写入警告,因为在这种情况下基于大小的修剪的“粒度”可能不足以防止每次修剪时删除所有或大多数旋转日志文件。Note设置
audit_log_max_size
本身不足以触发日志文件修剪,因为修剪算法使用audit_log_rotate_on_size
、audit_log_max_size
和audit_log_prune_seconds
共同。详见Audit Log Files的空间管理。 -
-
audit_log_password_history_keep_days
命令行格式 --audit-log-password-history-keep-days=#
系统变量 audit_log_password_history_keep_days
作用域 全局 动态 是 SET_VAR
Hint Applies否 类型 整数 默认值 0
最小值 0
最大值 4294967295
单位 天 审核日志插件使用MySQL密钥环(见Encrypting Audit Log Files)来实现日志文件加密。插件还实现了密码历史记录,包括密码存档和过期(删除)。
当审核日志插件创建新的加密密码时,它存档了以前的密码(如果存在),以便日后使用。
audit_log_password_history_keep_days
变量控制已存档的加密密码的自动删除。其值表示已存档的加密密码在多少天后被删除。默认值为0,表示密码保留期限为永久。新的审核日志加密密码在以下情况下创建:
-
在插件初始化期间,如果插件发现日志文件加密已启用,它检查密钥环中是否存在审核日志加密密码。如果不存在,插件自动生成一个随机的初始加密密码。
-
当
audit_log_encryption_password_set()
函数被调用以设置特定的密码时。
在每种情况下,插件将新密码存储在密钥环中,并使用它来加密新的日志文件。
已过期的审核日志加密密码删除发生在以下情况下:
-
在插件初始化期间。
-
当
audit_log_encryption_password_set()
函数被调用时。 -
当
audit_log_password_history_keep_days
的运行时值从当前值更改为大于 0 的值时。运行时值的更改发生在使用SET
语句时,该语句使用GLOBAL
或PERSIST
关键字,但不使用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=value
已弃用 是 系统变量 audit_log_policy
作用域 全局 动态 否 SET_VAR
提示应用否 类型 枚举 默认值 ALL
有效值 ALL
LOGINS
QUERIES
NONE
Note该已弃用的变量仅适用于遗留模式审核日志过滤(见 第 8.4.5.10 节,“遗留模式审核日志过滤”)。
控制审核日志插件如何将事件写入其日志文件的策略。下表显示了允许的值。
值 描述 ALL
记录所有事件 LOGINS
仅记录登录事件 QUERIES
仅记录查询事件 NONE
不记录任何事件(禁用审核流) audit_log_policy
只能在服务器启动时设置。在运行时,它是一个只读变量。两个其他系统变量,audit_log_connection_policy
和audit_log_statement_policy
,提供了更细粒度的日志策略控制,可以在启动时或运行时设置。如果您在启动时使用audit_log_policy
而不是其他两个变量,服务器将使用其值来设置那些变量。有关策略变量及其交互的更多信息,请参见 第 8.4.5.5 节,“配置审核日志特性”。 -
命令行格式 --audit-log-prune-seconds=#
系统变量 audit_log_prune_seconds
作用域 全局 动态 是 SET_VAR
提示应用否 类型 整数 默认值 0
最小值 0
最大值(Windows) 4294967295
最大值(其他) 18446744073709551615
单位 字节 audit_log_prune_seconds
与审核日志文件修剪有关,仅支持 JSON 格式日志文件。它控制基于日志文件年龄的修剪:-
值为 0(默认)禁用基于年龄的修剪。没有年龄限制。
-
值大于 0 启用基于年龄的修剪。该值是审核日志文件成为修剪对象的秒数。
Note仅设置
audit_log_prune_seconds
不足以触发日志文件修剪,因为修剪算法使用audit_log_rotate_on_size
、audit_log_max_size
和audit_log_prune_seconds
结合。详见 审核日志文件空间管理。 -
-
命令行格式 --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()
函数的方式设置其会话值audit_log_read_buffer_size
。 -
命令行格式 --audit-log-rotate-on-size=#
系统变量 audit_log_rotate_on_size
作用域 全局 动态 是 SET_VAR
提示应用否 类型 整数 默认值 0
最小值 0
最大值 18446744073709551615
单位 字节 块大小 4096
如果
audit_log_rotate_on_size
为 0,则审核日志插件不执行基于大小的日志文件旋转。如果需要旋转,必须手动执行;见 手动审核日志文件旋转(在 MySQL 8.0.31 之前)。如果
audit_log_rotate_on_size
大于 0,则自动基于大小的日志文件旋转将发生。每当写入日志文件时,如果其大小超过audit_log_rotate_on_size
值,审核日志插件将重命名当前日志文件,并使用原始名称打开新的当前日志文件。如果您将
audit_log_rotate_on_size
设置为不是 4096 的倍数的值,它将被截断到最近的倍数。特别是,将其设置为小于 4096 的值将其设置为 0,并且不会发生旋转,除非手动执行。Noteaudit_log_rotate_on_size
控制审核日志文件旋转的发生。它也可以与audit_log_max_size
和audit_log_prune_seconds
结合使用,以配置 JSON 格式日志文件的裁剪。详见 审核日志文件的空间管理。 -
命令行格式 --audit-log-statement-policy=value
已弃用 是 系统变量 audit_log_statement_policy
作用域 全局 动态 是 SET_VAR
提示应用否 类型 枚举 默认值 ALL
有效值 ALL
ERRORS
NONE
Note此已弃用变量仅适用于遗留模式审核日志过滤(见第 8.4.5.10 节,“遗留模式审核日志过滤”)。
控制审核日志插件如何将语句事件写入其日志文件的策略。下表显示了允许的值。
值 描述 ALL
记录所有语句事件 ERRORS
仅记录失败的语句事件 NONE
不记录语句事件 Note在服务器启动时,如果指定了
audit_log_statement_policy
的明确值,它可能会被覆盖,如果也指定了audit_log_policy
,如 第 8.4.5.5 节,“配置审核日志特征” 中所述。 -
命令行格式 --audit-log-strategy=value
系统变量 audit_log_strategy
作用域 全局 动态 否 SET_VAR
提示应用否 类型 枚举 默认值 ASYNCHRONOUS
有效值 ASYNCHRONOUS
PERFORMANCE
SEMISYNCHRONOUS
SYNCHRONOUS
审核日志插件使用的日志方法。这些策略值是允许的:
-
ASYNCHRONOUS
:异步日志。等待输出缓冲区中的空间。 -
PERFORMANCE
:异步日志。丢弃输出缓冲区中没有足够空间的请求。 -
SEMISYNCHRONOUS
:同步日志。允许操作系统缓存。 -
SYNCHRONOUS
:同步日志。在每个请求后调用sync()
。
-
如果启用了审核日志插件,它将公开多个状态变量,以提供操作信息。这些变量适用于遗留模式审核过滤(已弃用)和 JSON 模式审核过滤。
-
当前审核日志文件的大小。当事件写入日志时,值将增加,并在日志轮换时重置为 0。
-
当审核日志插件将事件写入 JSON 格式审核日志时,它使用缓冲区来存储事件内容,然后写入日志。如果查询长度大于缓冲区的大小,那么插件将事件直接写入日志,绕过缓冲区。该变量显示直接写入的次数。插件根据当前使用的写入策略(见
audit_log_strategy
)来确定计数。表 8.47 写入策略对直接写入计数的影响
写入策略 描述 ASYNCHRONOUS
如果事件大小不适合内部缓冲区 ( audit_log_buffer_size
服务器系统变量),则递增。PERFORMANCE
不递增。插件将丢弃大于内部缓冲区的事件。 SEMISYNCHRONOUS
总是递增。 SYNCHRONOUS
总是递增。 -
性能日志模式下最大的已删除事件大小。有关日志模式的描述,请参见 第 8.4.5.5 节,“配置审核日志特性”。
-
审核日志插件处理的事件数量,无论它们是否根据过滤策略写入日志(见 第 8.4.5.5 节,“配置审核日志特性”)。
-
审核日志插件处理的事件数量,因为过滤策略而未写入日志(见第 8.4.5.5 节,“配置审核日志特征”)。
-
在性能日志模式下,因审核日志缓冲区空间不足而丢失的事件数量。该值可能有助于评估如何设置
audit_log_buffer_size
以调整缓冲区大小以适应性能模式。有关日志模式的描述,请见第 8.4.5.5 节,“配置审核日志特征”。 -
写入审核日志的事件数量。
-
写入所有审核日志文件的总大小。与
Audit_log_current_size
不同的是,Audit_log_total_size
的值即使日志被旋转也会增加。 -
在异步日志模式下,事件等待审核日志缓冲区空间的次数。有关日志模式的描述,请见第 8.4.5.5 节,“配置审核日志特征”。