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@localhost
,USER
部分是user1
。 -
HOST
账户名称的一部分。对于账户
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 密钥环中获取 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 | +---------------------------------------------+
-
调用其他过滤函数将立即影响操作日志 filtering,并更新 audit 日志表。如果您使用语句,如
INSERT
、UPDATE
和DELETE
修改那些表的内容,变化不会立即生效。要使更改生效,请调用audit_log_filter_flush()
。Warningaudit_log_filter_flush()
应该在直接修改 audit 表后使用,强制重新加载所有过滤器。否则,这个函数应该避免。它实际上是 unload 和 reloadaudit_log
插件的简化版本,使用UNINSTALL PLUGIN
和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
表中被移除)。过滤终止包括当前会话:它们将被从过滤器中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
值,以表示没有更多可读事件。使用一个
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
: 从日志中读取事件的最大数量。如果省略该项,默认情况下直到日志末尾或读取缓冲区满,先到者为止。
要指定
audit_log_read()
的起始位置,传递一个哈希参数,其中包括或书签由timestamp
和id
项。如果哈希参数包括同时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节,“读取审核日志文件”。 -
-
返回最近写入审核日志事件的
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.4 之前,字符串返回值可以是二进制
JSON
字符串。关于将这些值转换为非二进制字符串,请参阅第8.4.5.6节,“读取审核日志文件”。 -
参数:
无。
返回值:
重命名的文件名称。
示例:
mysql> SELECT audit_log_rotate();
使用
audit_log_rotate()
需要AUDIT_ADMIN
权限。
表8.44 审核日志选项和变量参考
本节描述了 MySQL Enterprise Audit 命令选项和系统变量,配置 MySQL Enterprise Audit 的操作。如果在启动时指定的值不正确,audit_log
插件可能无法初始化properly,并且服务器也不会加载它。在这种情况下,服务器还可能会产生其他 audit 日志设置错误信息。
要配置 audit 日志插件的激活,可以使用以下选项:
-
Command-Line Format --audit-log[=value]
Type 枚举值 Default Value ON
Valid Values 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 |
+--------------------------------------+--------------+
您可以在服务器启动时设置这些变量,也可以在运行时设置。只有在遗留模式下可用的变量被特别标注。
-
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的倍数。插件只在初始化和终止时分配该缓冲区,并且只在异步日志时分配。
-
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压缩)。更多信息,请见压缩审核日志文件。 -
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节,“配置审核日志特性”中所述。 -
System Variable audit_log_current_session
Scope 全局,会话 Dynamic 否 SET_VAR
Hint Applies否 Type 布尔值 Default Value 取决于过滤策略
当前会话是否启用审核日志记录。该变量的会话值只读,设置时基于
audit_log_include_accounts
和audit_log_exclude_accounts
系统变量的值。审核日志插件使用会话值来确定是否对会话事件进行审核。(存在全局值,但插件不使用它。) -
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企业审核”。
-
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节,“禁用审核日志”。 -
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 加密算法)。更多信息,请参见审核日志文件加密。 -
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
的修改只影响创建于修改后连接,不影响现有连接。 -
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.log
audit.xml
用于XML格式,audit.json
用于JSON格式)。如果
audit_log_file
的值是一个相对路径名,插件将其解释为数据目录相对路径。如果值是全路径名,插件使用该值不变。全路径名可能有助于将审核日志文件存储在独立的文件系统或目录中。出于安全原因,务必将审核日志文件写入只能被 MySQL 服务器和具有合法理由查看日志的用户访问的目录。关于插件如何解释
audit_log_file
值和初始化和终止时文件重命名规则,见审核日志文件命名约定。审核日志插件使用包含审核日志文件的目录(由
audit_log_file
值确定)来搜索可读审核日志文件。从这些日志文件和当前文件中,插件构建一个可以与审核日志书签和阅读函数使用的列表。见第8.4.5.6节,“阅读审核日志文件”。 -
System Variable audit_log_filter_id
Scope 全局 Dynamic 会话 SET_VAR
Hint Applies否 Type 整数 Default Value 1
Minimum Value 0
Maximum Value 4294967295
该变量的会话值表示当前会话内部维护的审核过滤器ID。值为 0 表示当前会话没有分配过滤器。
-
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.
限定符。 -
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
特权),通常需要设置全局系统变量的运行时值。 -
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
只影响创建于修改后连接,不影响现有连接。 -
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_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_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_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
天的密码。
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
特权),通常需要设置全局系统变量运行值。 -
-
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_policy
和audit_log_statement_policy
提供了更细化的日志策略控制,可以在启动或运行时设置。如果使用audit_log_policy
在启动时,而不是其他两个变量,服务器将使用其值来设置那些变量。关于策略变量和它们的交互,请参见第8.4.5.5节,“配置日志特性”。 -
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_size
、audit_log_max_size
和audit_log_prune_seconds
。详细信息,请参见Audit 日志文件空间管理。 -
-
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()
。 -
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,除非手动旋转。Noteaudit_log_rotate_on_size
控制是否发生审核日志文件旋转。它也可以与audit_log_max_size
和audit_log_prune_seconds
一起使用,以配置旋转的 JSON 格式日志文件的清理。详细信息,请见审核日志文件空间管理。 -
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 日志特性”中所述。 -
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 模式的审计过滤。
-
当前审计日志文件的大小。值在事件写入日志时增加,并在日志轮转时重置为 0。
-
当审计日志插件将事件写入到JSON格式的审计日志时,它使用缓冲区来存储事件内容,直到写入它们。如果查询长度大于缓冲区大小,那么插件就直接将事件写入到日志中,跳过缓冲区。这個变量显示了直接写入的次数。插件根据当前写入策略(见
audit_log_strategy
)来确定计数。表8.45 直接写入次数的影响
Write Strategy Description 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节,“配置审核日志特性”。