MySQL审核日志参考
以下讨论可作为对MySQL企业审核组件的参考:
- 审核日志表
- 审核日志功能
- 审核日志选项和变量参考
- 审核日志选项和变量
- 审核日志状态变量
要安装审核日志表和函数,请使用“安装或卸载MySQL企业审核”中提供的说明。除非安装了这些组件,否则 udit_log
插件将在旧版模式下运行。请参见“传统模式审核日志过滤”。
审核日志表
MySQL Enterprise Audit使用mysql
系统数据库中的表来永久存储过滤器和用户帐户数据。只有具有该数据库特权的用户才能访问这些表。这些表使用InnoDB
存储引擎。
如果缺少这些表,则 udit_log
插件将在旧版模式下运行。请参见“传统模式审核日志过滤”。
该 udit_log_filter
表存储过滤器定义。该表包含以下列:
NAME
过滤器名称。
FILTER
与过滤器名称关联的过滤器定义。定义存储为
JSON
值。
该 udit_log_user
表存储用户帐户信息。该表包含以下列:
USER
帐户的用户名部分。对于一个帐户
user1@localhost
,USER
部分是user1
。HOST
帐户的主机名部分。对于一个帐户
user1@localhost
,HOST
部分是localhost
。FILTERNAME
分配给该帐户的过滤器的名称。过滤器名称将帐户与
udit_log_filter
表中定义的过滤器相关联。
审核日志功能
本节针对每个审核日志用户定义函数(UDF)描述其用途,调用顺序和返回值。有关可在何种条件下调用这些UDF的信息,请参见“MySQL审核日志过滤”。
每个审核日志UDF返回一个字符串,该字符串指示操作是否成功。OK
表示成功。表示失败。ERROR:message
从MySQL 8.0.19开始,审核日志UDF将字符串参数转换为utf8mb4
,字符串返回值是utf8mb4
字符串。在MySQL 8.0.19之前,审核日志UDF将字符串参数视为二进制字符串(这意味着它们不区分大小写),而字符串返回值是二进制字符串。
这些审核日志UDF可用:
udit_log_encryption_password_get([keyring_id])
此功能从MySQL密钥环获取审核日志加密密码,必须启用该密码或发生错误。任何钥匙圈插件都可以使用;有关说明,请参见“ MySQL密钥环”。
不带任何参数的函数将以二进制字符串的形式检索当前的加密密码。可以提供一个参数来指定要检索的审核日志加密密码。参数必须是当前密码或已归档密码的密钥环ID。
有关审核日志加密的其他信息,请参阅审核日志文件加密。
参数:
keyring_id
:从MySQL 8.0.17开始,此可选参数指示要检索的密码的密钥环ID。允许的最大长度为766个字节。如果省略,该函数将检索当前密码。在MySQL 8.0.17之前,不允许使用任何参数。该功能始终检索当前密码。
返回值:
成功的密码字符串(最大766个字节),或者
NULL
失败的错误字符串。例:
检索当前密码:
mysql>
SELECT audit_log_encryption_password_get(); +------------------------------------- + | audit_log_encryption_password_get() | +------------------------------------- + | secret | +------------------------------------- +要通过ID检索密码,您可以通过查询Performance Schema
keyring_keys
表来确定存在哪些审核日志密钥环ID :mysql>
SELECT *FROM performance_schem .keyring_keysWHERE KEY_ID LIKE 'audit_log%'ORDER BY KEY_ID; +----------------------------- +----------- +---------------- + | KEY_ID | KEY_OWNER | BACKEND_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 | +------------------------------------------------------------------ +udit_log_encryption_password_set(password)
将当前的审核日志加密密码设置为该参数,并将密码存储在MySQL密钥环中。从MySQL 8.0.19开始,密码存储为
utf8mb4
字符串。在MySQL 8.0.19之前,密码以二进制形式存储。如果启用了加密,此功能将执行日志文件轮换操作,重命名当前日志文件,并开始使用密码加密的新日志文件。必须启用密钥环,否则会发生错误。任何钥匙圈插件都可以使用;有关说明,请参见“ MySQL密钥环”。
有关审核日志加密的其他信息,请参阅审核日志文件加密。
参数:
password
:密码字符串。允许的最大长度为766个字节。返回值:
1表示成功,0表示失败。
例:
mysql>
SELECT audit_log_encryption_password_set(password); +--------------------------------------------- + | audit_log_encryption_password_set(password)| +--------------------------------------------- + | 1 | +--------------------------------------------- +udit_log_filter_flush()
调用任何其他筛选UDF都会立即影响操作审核日志筛选,并更新审核日志表。相反,如果你修改这些表的内容,直接使用语句,例如
INSERT
,UPDATE
和DELETE
,所做的更改不会影响立即过滤。要刷新您的更改并使它们可操作,请致电udit_log_filter_flush()
。警告
udit_log_filter_flush()
仅应在直接修改审核表后才使用,以强制重新加载所有过滤器。否则,应避免使用此功能。实际上,它是udit_log
使用UNINSTALL PLUGIN
plus 卸载和重新加载插件的简化版本INSTALL PLUGIN
。udit_log_filter_flush()
影响所有当前会话,并将它们与以前的过滤器分离。除非断开并重新连接或执行更改用户操作,否则将不再记录当前会话。如果此功能失败,将返回错误消息并禁用审核日志,直到下一次成功调用为止
udit_log_filter_flush()
。参数:
没有。
返回值:
指示操作是否成功的字符串。
OK
表示成功。表示失败。ERROR:message
例:
mysql>
SELECT audit_log_filter_flush(); +-------------------------- + | audit_log_filter_flush() | +-------------------------- + | OK | +-------------------------- +udit_log_filter_remove_filter(filter_name)
给定过滤器名称,从当前过滤器集中删除该过滤器。过滤器不存在不是错误。
如果将删除的过滤器分配给任何用户帐户,则这些用户将停止过滤(将它们从
udit_log_user
表中删除)。过滤终止包括这些用户的任何当前会话:它们与过滤器分离并且不再记录。参数:
filter_name
:指定过滤器名称的字符串。
返回值:
指示操作是否成功的字符串。
OK
表示成功。表示失败。ERROR:message
例:
mysql>
SELECT audit_log_filter_remove_filter('SomeFilter'); +---------------------------------------------- + | audit_log_filter_remove_filter('SomeFilter') | +---------------------------------------------- + | OK | +---------------------------------------------- +udit_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 | +------------------------------------------------- +udit_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 | +----------------------------------------------- +udit_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 | +------------------------------------------------------------ +udit_log_read([ rg])
从审核日志中读取事件,并返回
JSON
包含审核事件数组的二进制字符串。如果审核日志格式不是JSON
,则会发生错误。返回值中的每个事件都是
JSON
哈希,除了最后一个数组元素可能是一个值,该值指示没有后续事件可读取。JSON
null
对于
udit_log_read()
会话中的第一个呼叫,请传递一个书签,以指示从何处开始阅读。如果返回的数组的最终值不是一个值,则在刚刚读取的事件之后会有更多事件,可以在不使用书签参数或不使用书签参数的情况下调用它们。不带参数的情况下,读取继续进行下一个未读事件。使用书签参数时,将从书签继续读取。JSON
null
udit_log_read()
如果返回的数组的最终值是一个值,则不再有其他事件需要读取,并且下一次调用必须包含书签参数。
JSON
null
udit_log_read()
要获取最近写入的事件的书签,请致电
udit_log_read_bookmark()
。有关审核日志读取功能的其他信息,请参阅《审核日志文件读取》。
参数:
rg
:可选书签,用包含JSON
哈希值的字符串表示,该哈希值指示在何处读取多少内容。以下各项的rg
值有意义(忽略其他项):timestamp
,id
:第一个事件的审计日志中的位置读取。这两个项目都必须存在才能完全指定位置。max_array_length
:要从日志中读取的最大事件数。如果省略,则默认为读取到日志末尾或读取缓冲区已满,以先到者为准。
返回值:
二进制
JSON
字符串,其中包含成功的审计事件数组,或NULL
失败的错误消息数组。例:
mysql>
SELECT audit_log_read( udit_log_read_bookmark()); +----------------------------------------------------------------------- + | audit_log_read(audit_log_read_bookmark()) | +----------------------------------------------------------------------- + | [ {"timestamp":"2019 -10 -03 22:41:24","id":0,"class":"connection", ... | +----------------------------------------------------------------------- +udit_log_read_bookmark()
返回
JSON
表示最近写入的审核日志事件的书签的二进制字符串。如果审核日志格式不是JSON
,则会发生错误。书签是
JSON
带有timestamp
和的散列,id
表示项目在审核日志中的位置。它适合传递给udit_log_read()
该功能指示从哪里开始读取。有关审核日志读取功能的其他信息,请参阅《审核日志文件读取》。
参数:
没有。
返回值:
二进制
JSON
字符串,包含成功的书签或NULL
失败的错误。例:
mysql>
SELECT audit_log_read_bookmark(); +------------------------------------------------- + | audit_log_read_bookmark() | +------------------------------------------------- + | { "timestamp": "2019 -10 -03 21:03:44", "id": 0 } | +------------------------------------------------- +
审核日志选项和变量参考
表6.37审核日志选项和变量参考
名称 | Cmd线 | 选项文件 | 系统变量 | 状态变量 | 可变范围 | 动态 |
---|---|---|---|---|---|---|
审核日志 | 是 | 是 | ||||
udit_log_buffer_size | 是 | 是 | 是 | Global | 没有 | |
udit_log_compression | 是 | 是 | 是 | Global | 没有 | |
udit_log_connection_policy | 是 | 是 | 是 | Global | 是 | |
udit_log_current_session | 是 | 都 | 没有 | |||
Audit_log_current_size | 是 | Global | 没有 | |||
udit_log_encryption | 是 | 是 | 是 | Global | 没有 | |
Audit_log_event_max_drop_size | 是 | Global | 没有 | |||
Audit_log_events | 是 | Global | 没有 | |||
Audit_log_events_filtered | 是 | Global | 没有 | |||
Audit_log_events_lost | 是 | Global | 没有 | |||
Audit_log_events_书面 | 是 | Global | 没有 | |||
udit_log_exclude_accounts | 是 | 是 | 是 | Global | 是 | |
udit_log_file | 是 | 是 | 是 | Global | 没有 | |
udit_log_filter_id | 是 | 都 | 没有 | |||
udit_log_flush | 是 | Global | 是 | |||
udit_log_format | 是 | 是 | 是 | Global | 没有 | |
udit_log_include_accounts | 是 | 是 | 是 | Global | 是 | |
udit_log_password_history_keep_days | 是 | 是 | 是 | Global | 是 | |
udit_log_policy | 是 | 是 | 是 | Global | 没有 | |
udit_log_read_buffer_size | 是 | 是 | 是 | 变化 | 变化 | |
udit_log_rotate_on_size | 是 | 是 | 是 | Global | 是 | |
udit_log_statement_policy | 是 | 是 | 是 | Global | 是 | |
udit_log_strategy | 是 | 是 | 是 | Global | 没有 | |
Audit_log_total_size | 是 | Global | 没有 | |||
Audit_log_write_waits | 是 | Global | 没有 |
审核日志选项和变量
本节描述了配置MySQL Enterprise Audit操作的命令选项和系统变量。如果启动时指定的值不正确,则 udit_log
插件可能无法正确初始化,并且服务器不会加载它。在这种情况下,服务器也可能会为其他审核日志设置生成错误消息,因为它无法识别它们。
要配置审核日志插件的激活,请使用以下选项:
--audit-log[=value]
属性 值 命令行格式 --audit-log[=value]
类型 列举 默认值 ON
有效值 ON
OFF
FORCE
FORCE_PLUS_PERMANENT
此选项控制服务器
udit_log
在启动时如何加载插件。这仅当插件已经与以前登记的INSTALL PLUGIN
或装有--plugin-load
或--plugin-load-add
。请参见“MySQL企业防火墙”。该选项值应为可用于插件加载选项的值之一,如“安装和卸载插件”中所述。例如,
--audit-log=FORCE_PLUS_PERMANENT
告诉服务器加载插件,并防止在服务器运行时将其删除。
如果启用了审核日志插件,它将公开几个系统变量,这些变量可控制日志记录:
mysql>SHOW VARIABLES LIKE 'audit_log%'; +----------------------------- +-------------- + | Variable_name | Value | +----------------------------- +-------------- + | audit_log_buffer_size | 1048576 | | audit_log_connection_policy | ALL | | audit_log_current_session | OFF | | audit_log_exclude_accounts | | | audit_log_file | audit.log | | audit_log_filter_id | 0 | | audit_log_flush | OFF | | audit_log_format | NEW | | audit_log_include_accounts | | | audit_log_policy | ALL | | audit_log_rotate_on_size | 0 | | audit_log_statement_policy | ALL | | audit_log_strategy | ASYNCHRONOUS | +----------------------------- +-------------- +
您可以在服务器启动时设置这些变量中的任何一个,在运行时设置其中一些。请注意那些仅适用于旧模式审核日志过滤的内容。
udit_log_buffer_size
属性 值 命令行格式 --audit-log-buffer-size=#
系统变量 udit_log_buffer_size
范围 Global 动态 没有 SET_VAR
提示适用没有 类型 整数 默认值 1048576
最低值 4096
最大值(64位平台) 18446744073709547520
最大值(32位平台) 4294967295
当审核日志插件将事件异步写入日志时,它将在写入事件之前使用缓冲区存储事件内容。此变量控制该缓冲区的大小(以字节为单位)。服务器将值调整为4096的倍数。插件使用单个缓冲区,它在初始化时分配,在终止时删除。仅当日志记录异步时,插件才会分配此缓冲区。
udit_log_compression
属性 值 命令行格式 --audit-log-compression=value
系统变量 udit_log_compression
范围 Global 动态 没有 SET_VAR
提示适用没有 类型 列举 默认值 NONE
有效值 NONE
GZIP
审核日志文件的压缩类型。允许值为
NONE
(不压缩;默认值)和GZIP
(GNU Zip压缩)。有关更多信息,请参见审核日志文件压缩。udit_log_connection_policy
属性 值 命令行格式 --audit-log-connection-policy=value
系统变量 udit_log_connection_policy
范围 Global 动态 是 SET_VAR
提示适用没有 类型 列举 默认值 ALL
有效值 ALL
ERRORS
NONE
注意
此变量仅适用于旧模式审核日志过滤(请参见“传统模式审核日志过滤”)。
控制审核日志插件如何将连接事件写入其日志文件的策略。下表显示了允许的值。
值 描述 ALL
记录所有连接事件 ERRORS
仅记录失败的连接事件 NONE
不记录连接事件 注意
在服务器启动时,
udit_log_connection_policy
如果udit_log_policy
也指定了任何给定的显式值,则可以将其覆盖,如“审核日志记录配置”中所述。udit_log_current_session
属性 值 系统变量 udit_log_current_session
范围 Global, Session 动态 没有 SET_VAR
提示适用没有 类型 布尔型 默认值 depends on filtering policy
当前会话是否启用审核日志记录。该变量的会话值是只读的。根据
udit_log_include_accounts
和udit_log_exclude_accounts
变量的值在会话开始时进行设置。审核日志插件使用会话值来确定是否审核该会话的事件。(有一个全局值,但是插件不使用它。)udit_log_encryption
属性 值 命令行格式 --audit-log-encryption=value
系统变量 udit_log_encryption
范围 Global 动态 没有 SET_VAR
提示适用没有 类型 列举 默认值 NONE
有效值 NONE
AES
审核日志文件的加密类型。允许的值为
NONE
(不加密;默认值)和AES
(AES-256-CBC密码加密)。有关更多信息,请参见审核日志文件加密。udit_log_exclude_accounts
属性 值 命令行格式 --audit-log-exclude-accounts=value
系统变量 udit_log_exclude_accounts
范围 Global 动态 是 SET_VAR
提示适用没有 类型 string 默认值 NULL
注意
此变量仅适用于旧模式审核日志过滤(请参见“传统模式审核日志过滤”)。
不应记录事件的帐户。该值应为
NULL
或包含一个或多个用逗号分隔的帐户名列表的字符串。有关更多信息,请参见“MySQL审核日志过滤”。修改
udit_log_exclude_accounts
仅影响修改后创建的连接,不影响现有连接。udit_log_file
属性 值 命令行格式 --audit-log-file=file_name
系统变量 udit_log_file
范围 Global 动态 没有 SET_VAR
提示适用没有 类型 文件名 默认值 udit.log
审核日志插件向其写入事件的文件的基本名称和后缀。
udit.log
不管日志格式如何,默认值为。要使名称后缀与格式相对应,请显式设置名称,选择其他后缀(例如,udit.xml
对于XML格式,udit.json
对于JSON格式)。如果的值
udit_log_file
是相对路径名,则插件将相对于数据目录对其进行解释。如果该值是完整路径名,那么插件将按原样使用该值。如果希望将审核文件放在单独的文件系统或目录中,则完整路径名可能很有用。出于安全原因,请将审核日志文件写入只有MySQL服务器和有正当理由参见日志的用户才能访问的目录。有关审核日志插件如何解释
udit_log_file
值以及在插件初始化和终止时发生的文件重命名规则的详细信息,请参阅审核日志文件名。审核日志插件使用包含审核日志文件(由
udit_log_file
值确定)的目录作为搜索可读审核日志文件的位置。从这些日志文件和当前文件中,插件将构建一个列表,这些列表将与审核日志书签和读取功能一起使用。请参阅审核日志文件读取。udit_log_filter_id
属性 值 系统变量 udit_log_filter_id
范围 Global, Session 动态 没有 SET_VAR
提示适用没有 类型 整数 该变量的会话值指示当前会话的审核过滤器的内部维护ID。值为0表示会话未分配过滤器。
udit_log_flush
属性 值 系统变量 udit_log_flush
范围 Global 动态 是 SET_VAR
提示适用没有 类型 布尔型 默认值 OFF
当将此变量设置为启用(1或
ON
)时,审核日志插件将关闭并重新打开其日志文件以刷新它。(该值保持不变,OFF
因此您无需在再次启用它再次执行另一个刷新之前就明确禁用它。)启用此变量除非udit_log_rotate_on_size
为0,否则无效。有关更多信息,请参见“MySQL审核日志记录配置”。udit_log_format
属性 值 命令行格式 --audit-log-format=value
系统变量 udit_log_format
范围 Global 动态 没有 SET_VAR
提示适用没有 类型 列举 默认值 NEW
有效值 OLD
NEW
JSON
审核日志文件格式。允许的值为
OLD
(旧样式XML),NEW
(新样式XML;默认值)和JSON
。有关每种格式的详细信息,请参见“MySQL审核日志文件格式”。注意
有关更改日志格式时要考虑的问题的信息,请参阅审核日志文件格式。
udit_log_include_accounts
属性 值 命令行格式 --audit-log-include-accounts=value
系统变量 udit_log_include_accounts
范围 Global 动态 是 SET_VAR
提示适用没有 类型 string 默认值 NULL
注意
此变量仅适用于旧模式审核日志过滤(请参见“传统模式审核日志过滤”)。
应记录事件的帐户。该值应为
NULL
或包含一个或多个用逗号分隔的帐户名列表的字符串。有关更多信息,请参见“MySQL审核日志过滤”。修改
udit_log_include_accounts
仅影响修改后创建的连接,不影响现有连接。udit_log_password_history_keep_days
属性 值 命令行格式 --audit-log-password-history-keep-days=#
介绍了 8.0.17 系统变量 udit_log_password_history_keep_days
范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 0
最低值 0
最大值 4294967295
创建新的加密密码后,审核日志插件将存档先前的密码(如果存在)以供以后使用。该
udit_log_password_history_keep_days
变量控制自动删除已归档的密码。它的值表示删除已存档审核日志加密密码的天数。缺省值为0,表示禁用密码删除功能。密码保留期限是永远的。在以下情况下,将创建新的审核日志加密密码:
- 在插件初始化期间,如果插件发现启用了日志文件加密,则它将检查密钥环是否包含审核日志加密密码。如果不是,该插件会自动生成一个随机的初始加密密码。
udit_log_encryption_password_set()
调用该函数以设置特定密码时。
在每种情况下,插件都将密码存储在钥匙圈中,并使用它来加密新的日志文件。
在以下情况下,将清除旧的审核日志加密密码:
- 在插件初始化期间。
- 当
udit_log_encryption_password_set()
函数被调用。 - 当的运行时值
udit_log_password_history_keep_days
从其当前值更改为大于0的值时。SET
使用GLOBAL
orPERSIST
关键字而不使用关键字的语句可能会发生运行时值更改PERSIST_ONLY
。PERSIST_ONLY
将变量设置写入mysqld-auto.cnf
,但对运行时值没有影响。
密码清除发生时,的当前值
udit_log_password_history_keep_days
确定要删除的密码:- 如果该值
N
> 0,则该插件会删除已使用超过N
几天的密码。 - 如果值为0,则插件不会删除任何密码。
注意
注意不要使读取已归档的加密日志文件所需的旧密码过期。
如果通常禁用密码过期(
udit_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;除了设置全局系统变量运行时值通常所需的或特权外,设置的运行时值还
udit_log_password_history_keep_days
需要AUDIT_ADMIN
特权。SYSTEM_VARIABLES_ADMIN
SUPER
udit_log_policy
属性 值 命令行格式 --audit-log-policy=value
系统变量 udit_log_policy
范围 Global 动态 没有 SET_VAR
提示适用没有 类型 列举 默认值 ALL
有效值 ALL
LOGINS
QUERIES
NONE
注意
此变量仅适用于旧模式审核日志过滤(请参见“传统模式审核日志过滤”)。
控制审核日志插件如何将事件写入其日志文件的策略。下表显示了允许的值。
值 描述 ALL
记录所有事件 LOGINS
仅记录登录事件 QUERIES
仅记录查询事件 NONE
不记录任何内容(禁用审核流) udit_log_policy
只能在服务器启动时设置。在运行时,它是一个只读变量。另外两个系统变量udit_log_connection_policy
和udit_log_statement_policy
可以更好地控制日志记录策略,可以在启动时或运行时进行设置。如果udit_log_policy
在启动时使用它而不是其他两个变量,则服务器将使用其值来设置这些变量。有关策略变量及其相互作用的更多信息,请参见“MySQL审核日志记录配置”。udit_log_read_buffer_size
属性 值 命令行格式 --audit-log-read-buffer-size=#
系统变量 udit_log_read_buffer_size
范围(>= 8.0.12) Global, Session 范围(8.0.11) Global 动态(>= 8.0.12) 是 动态(8.0.11) 没有 SET_VAR
提示适用没有 类型 整数 默认值(>= 8.0.12) 32768
预设值(8.0.11) 1048576
最小值(>= 8.0.12) 32768
最小值(8.0.11) 1024
最大值 4194304
从审核日志文件读取的缓冲区大小,以字节为单位。该
udit_log_read()
函数读取的字节数不超过该数量。仅JSON日志格式支持日志文件读取。有关更多信息,请参见审核日志文件阅读。从MySQL 8.0.12开始,此变量的默认值为32KB,可以在运行时设置。每个客户端应为其设置
udit_log_read_buffer_size
适当的会话值udit_log_read()
。MySQL 8.0.12之前的版本udit_log_read_buffer_size
的默认值为1MB,会影响所有客户端,并且只能在服务器启动时进行更改。udit_log_rotate_on_size
属性 值 命令行格式 --audit-log-rotate-on-size=#
系统变量 udit_log_rotate_on_size
范围 Global 动态 是 SET_VAR
提示适用没有 类型 整数 默认值 0
如果
udit_log_rotate_on_size
值为0,则审核日志插件不会执行自动日志文件轮换。而是使用udit_log_flush
关闭并重新打开按需日志。在这种情况下,请在刷新文件之前在服务器外部手动重命名该文件。如果该
udit_log_rotate_on_size
值大于0,则会自动进行基于大小的日志文件轮换。每当写入日志文件导致其大小超过该udit_log_rotate_on_size
值时,审核日志插件都会关闭当前日志文件,将其重命名,然后打开一个新的日志文件。有关审核日志文件轮换的更多信息,请参见审核日志文件空间管理和名称轮换。
如果将此变量设置为不是4096的倍数的值,它将被截断为最接近的倍数。(因此,将其设置为小于4096的效果是将其设置为0且不进行旋转,除非手动进行。)
udit_log_statement_policy
属性 值 命令行格式 --audit-log-statement-policy=value
系统变量 udit_log_statement_policy
范围 Global 动态 是 SET_VAR
提示适用没有 类型 列举 默认值 ALL
有效值 ALL
ERRORS
NONE
注意
此变量仅适用于旧模式审核日志过滤(请参见“传统模式审核日志过滤”)。
控制审核日志插件如何将语句事件写入其日志文件的策略。下表显示了允许的值。
值 描述 ALL
记录所有语句事件 ERRORS
仅记录失败的语句事件 NONE
不记录语句事件 注意
在服务器启动时,
udit_log_statement_policy
如果udit_log_policy
也指定了任何给定的显式值,则可以将其覆盖,如“审核日志记录配置”中所述。udit_log_strategy
属性 值 命令行格式 --audit-log-strategy=value
系统变量 udit_log_strategy
范围 Global 动态 没有 SET_VAR
提示适用没有 类型 列举 默认值 ASYNCHRONOUS
有效值 ASYNCHRONOUS
PERFORMANCE
SEMISYNCHRONOUS
SYNCHRONOUS
审核日志插件使用的日志记录方法。允许使用以下策略值:
ASYNCHRONOUS
:异步记录。等待输出缓冲区中的空间。PERFORMANCE
:异步记录。删除输出缓冲区中没有足够空间的请求。SEMISYNCHRONOUS
:同步记录。允许操作系统进行缓存。SYNCHRONOUS
:同步记录。sync()
每次请求后致电。
审核日志状态变量
如果启用了审核日志插件,则它将公开几个提供操作信息的状态变量。这些变量可用于旧模式审核过滤和JSON模式审核过滤。
Audit_log_current_size
当前审核日志文件的大小。当事件写入日志时,该值增加;旋转日志时,该值重置为0。
Audit_log_event_max_drop_size
性能日志记录模式下最大丢弃事件的大小。有关日志记录模式的说明,请参见“MySQL审核日志记录配置”。
Audit_log_events
审核日志插件处理的事件数,无论是否基于过滤策略将其写入日志(请参见“MySQL审核日志记录配置”)。
Audit_log_events_filtered
由审计日志插件处理的事件数量,这些事件是根据过滤策略过滤的(未写入日志)(请参见“MySQL审核日志记录配置”)。
Audit_log_events_lost
由于事件大于可用审核日志缓冲区空间,因此在性能日志记录模式下丢失的事件数。该值对于评估如何设置
udit_log_buffer_size
性能模式的缓冲区大小可能很有用。有关日志记录模式的说明,请参见“MySQL审核日志记录配置”。Audit_log_events_written
写入审核日志的事件数。
Audit_log_total_size
写入所有审核日志文件的事件的总大小。与不同
Audit_log_current_size
,Audit_log_total_size
即使旋转了日志,的值也会增加。Audit_log_write_waits
在异步日志记录模式下,事件必须等待审核日志缓冲区中的空间的次数。有关日志记录模式的说明,请参见“MySQL审核日志记录配置”。