以下部分提供对 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
表存储过滤器定义。该表具有以下列
名称
过滤器名称。
过滤器
与过滤器名称关联的过滤器定义。定义存储为
JSON
值。
audit_log_user
表存储用户帐户信息。该表具有以下列
用户
帐户的用户名部分。对于帐户
user1@localhost
,USER
部分为user1
。主机
帐户的主机名部分。对于帐户
user1@localhost
,HOST
部分为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 | +---------------------------------------------+
调用任何其他过滤函数都会立即影响操作审计日志过滤,并更新审计日志表。如果您使用
INSERT
、UPDATE
和DELETE
等语句直接修改这些表的内容,则更改不会立即影响过滤。要刷新更改并使其生效,请调用audit_log_filter_flush()
。警告audit_log_filter_flush()
仅应在直接修改审计表后使用,以强制重新加载所有过滤器。否则,应避免使用此函数。实际上,它是在使用UNINSTALL PLUGIN
和INSTALL 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 | +------------------------------------------------------------+
读取审计日志并返回一个
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": { "timestamp": "value" }
timestamp
,id
:审计日志中要读取的第一个事件的位置。timestamp
和id
项目一起构成了一个书签,该书签唯一地标识特定事件。如果audit_log_read()
参数包含任一项目,则它必须包含两者以完全指定位置,否则会发生错误。max_array_length
:要从日志中读取的最大事件数。如果省略此项目,则默认值是读取到日志末尾或读取缓冲区已满,以先发生者为准。
要将起始位置指定为
audit_log_read()
,请传递一个包含start
项目或由timestamp
和id
项目组成的书签的哈希参数。如果哈希参数同时包含start
项目和书签,则会发生错误。如果哈希参数未指定起始位置,则读取将从当前位置继续。
如果时间戳值不包含时间部分,则将假定时间部分为
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 9.0 之前,字符串返回值可以是二进制
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 9.0 之前,字符串返回值可以是二进制
JSON
字符串。有关将这些值转换为非二进制字符串的信息,请参见第 8.4.5.6 节,“读取审计日志文件”。参数
无。
返回值
重命名的文件名。
示例
mysql> SELECT audit_log_rotate();
使用
audit_log_rotate()
需要AUDIT_ADMIN
权限。
表 8.43 审计日志选项和变量参考
本节介绍配置 MySQL Enterprise Audit 操作的命令选项和系统变量。如果在启动时指定的选项值不正确,则 audit_log
插件可能无法正常初始化,服务器也不会加载它。在这种情况下,服务器也可能生成有关其他审计日志设置的错误消息,因为它无法识别这些设置。
要配置审计日志插件的激活,请使用以下选项
-
命令行格式 --audit-log[=value]
类型 枚举 默认值 ON
有效值 ON
OFF
FORCE
FORCE_PLUS_PERMANENT
此选项控制服务器在启动时如何加载
audit_log
插件。它仅在插件已通过INSTALL PLUGIN
注册或使用--plugin-load
或--plugin-load-add
加载后可用。见 第 8.4.5.2 节,“安装或卸载 MySQL Enterprise Audit”。选项值应为插件加载选项中可用的值之一,如 第 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
注意此已弃用的变量仅适用于传统模式审计日志过滤(请参阅 第 8.4.5.10 节,“传统模式审计日志过滤”)。
控制审计日志插件如何将连接事件写入其日志文件的策略。下表显示了允许的值。
值 描述 ALL
记录所有连接事件 ERRORS
仅记录失败的连接事件 NONE
不记录连接事件 注意在服务器启动时,如果还指定了
audit_log_policy
,则audit_log_connection_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
指定
audit_log
插件用于查找其表的数据库。此变量是只读的。有关更多信息,请参阅 第 8.4.5.2 节,“安装或卸载 MySQL Enterprise Audit”)。 -
命令行格式 --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=value
已弃用 是 系统变量 audit_log_exclude_accounts
范围 全局 动态 是 SET_VAR
提示适用否 类型 字符串 默认值 NULL
注意此已弃用的变量仅适用于传统模式审计日志过滤(请参阅 第 8.4.5.10 节,“传统模式审计日志过滤”)。
不应记录事件的帐户。该值应为
NULL
或包含一个或多个逗号分隔的帐户名称的字符串。有关更多信息,请参阅 第 8.4.5.7 节,“审计日志过滤”。对
audit_log_exclude_accounts
的修改仅影响在修改之后创建的连接,而不影响现有连接。 -
命令行格式 --audit-log-file=file_name
系统变量 audit_log_file
范围 全局 动态 否 SET_VAR
提示适用否 类型 文件名 默认值 audit.log
审计日志插件写入事件的文件的基名和后缀。默认值为
audit.log
,与日志记录格式无关。要使名称后缀与格式相对应,请显式设置名称,选择不同的后缀(例如,对于 XML 格式,则为audit.xml
;对于 JSON 格式,则为audit.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
注意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
),也不会自动刷新权限。介于
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 格式的审计日志输出。在这种情况下,启用此变量会导致每个日志文件记录包含一个
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
注意此已弃用的变量仅适用于传统模式审计日志过滤(请参阅 第 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 倍。否则,会向服务器错误日志写入警告,因为在这种情况下,基于大小的修剪的“粒度”可能不足以防止每次修剪时删除所有或大多数轮转的日志文件。注意单独设置
audit_log_max_size
不足以导致日志文件修剪,因为修剪算法会结合使用audit_log_rotate_on_size
、audit_log_max_size
和audit_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 的值时。运行时值更改适用于使用GLOBAL
或PERSIST
关键字的SET
语句,但不适用于PERSIST_ONLY
关键字。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=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_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 的值启用基于年龄的修剪。该值是审计日志文件将被修剪后的秒数。
注意单独设置
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,则审计日志插件不会执行基于大小的自动日志文件轮转。如果要进行轮转,则必须手动执行;请参阅 手动审计日志文件轮转。如果
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_size
和audit_log_prune_seconds
结合使用,以配置已轮转的 JSON 格式日志文件的修剪。有关详细信息,请参阅 审计日志文件空间管理。 -
命令行格式 --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=value
系统变量 audit_log_strategy
范围 全局 动态 否 SET_VAR
提示适用否 类型 枚举 默认值 ASYNCHRONOUS
有效值 ASYNCHRONOUS
PERFORMANCE
SEMISYNCHRONOUS
SYNCHRONOUS
审计日志插件使用的日志记录方法。这些策略值是允许的
ASYNCHRONOUS
:异步记录。等待输出缓冲区中的空间。PERFORMANCE
:异步记录。丢弃输出缓冲区空间不足的请求。SEMISYNCHRONOUS
:同步记录。允许操作系统缓存。SYNCHRONOUS
:同步记录。在每个请求后调用sync()
。
如果启用了审计日志插件,它会公开一些状态变量,这些变量提供操作信息。这些变量可用于传统模式审计过滤(已弃用)和 JSON 模式审计过滤。
当前审计日志文件的大小。当事件写入日志时,该值会增加,并在日志轮转时重置为 0。
当审计日志插件将事件写入 JSON 格式的审计日志时,它会使用缓冲区来存储事件内容,然后再将它们写入。如果查询长度大于缓冲区的大小,则插件会将事件直接写入日志,绕过缓冲区。此变量显示直接写入次数。插件根据当前使用的写入策略来确定计数(请参阅
audit_log_strategy
)。表 8.44 写入策略对直接写入计数的影响
写入策略 描述 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 节,“配置审计日志记录特性”。