以下部分提供了对 MySQL Enterprise Audit 元素的参考:
要安装审计日志表和函数,请使用
第 6.4.5.2 节“安装或卸载 MySQL Enterprise Audit”中提供的说明。除非安装了这些对象,否则audit_log插件将以旧模式运行。请参阅
第 6.4.5.10 节,“传统模式审计日志过滤”。
MySQL Enterprise Audit 使用mysql系统数据库中的表来持久存储过滤器和用户帐户数据。这些表只能由对该数据库具有权限的用户访问。这些表使用
InnoDB存储引擎。
如果缺少这些表,audit_log
插件将以传统模式运行。请参阅
第 6.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表中定义的过滤器相关联。
本节描述了每个审计日志函数的用途、调用顺序和返回值。有关可以调用这些函数的条件的信息,请参阅第 6.4.5.7 节,“审计日志过滤”。
每个审计日志函数都会返回一个字符串,指示操作是否成功。OK
表示成功。表示失败。
ERROR:
message
从 MySQL 8.0.19 开始,审计日志函数将字符串参数转换为字符串utf8mb4,字符串返回值为utf8mb4字符串。在 MySQL 8.0.19 之前,审计日志函数将字符串参数视为二进制字符串(这意味着它们不区分大小写),字符串返回值是二进制字符串。
如果从mysql客户端
中调用审计日志功能
,二进制字符串结果将使用十六进制表示法显示,具体取决于
--binary-as-hex. 有关该选项的更多信息,请参阅第 4.5.1 节,“mysql — MySQL 命令行客户端”。
这些审计日志功能可用:
audit_log_encryption_password_get([keyring_id])该函数从 MySQL keyring 中获取审计日志加密密码,必须启用否则会出错。可以使用任何密钥环组件或插件;有关说明,请参阅第 6.4.4 节,“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 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 密钥环中。从 MySQL 8.0.19 开始,密码以
utf8mb4字符串形式存储。在 MySQL 8.0.19 之前,密码以二进制形式存储。如果启用了加密,此函数将执行重命名当前日志文件的日志文件轮换操作,并开始使用密码加密的新日志文件。必须启用密钥环,否则会发生错误。可以使用任何密钥环组件或插件;有关说明,请参阅 第 6.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()只应在直接修改审计表后使用,以强制重新加载所有过滤器。否则,应避免使用此功能。实际上,它是 使用plus 卸载和重新加载audit_log插件 的简化版本。UNINSTALL PLUGININSTALL PLUGINaudit_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散列,但最后一个元素可能是一个 值,表示没有可读取的后续事件。JSONnull使用由值组成的参数 , 关闭当前读取序列。
JSONnullaudit_log_read()有关审核日志读取过程的更多详细信息,请参阅第 6.4.5.6 节,“读取审核日志文件”。
参数:
要获取最近编写的事件的书签,请调用
audit_log_read_bookmark()。arg: 该参数是可选的。如果省略,该函数将从当前位置读取事件。如果存在,该参数可以是 关闭读取序列的值或散列。在散列参数中,项目是可选的,并且控制读取操作的各个方面,例如开始读取的位置或要读取的事件数。以下项目很重要(其他项目被忽略):JSONnullJSONstart:要读取的第一个事件在审核日志中的位置。该位置作为时间戳给出,读取从时间戳值或之后发生的第一个事件开始。该start项目具有这种格式,其中value是文字时间戳值:"start": { "timestamp": "value" }start从MySQL 8.0.22 开始允许 该项目。timestamp,id: 要读取的第一个事件在审核日志中的位置。timestamp和id项目一起构成了唯一标识特定事件的书签。如果audit_log_read()参数包含其中一项,则它必须包含两者才能完全指定位置,否则会发生错误。max_array_length:从日志中读取的最大事件数。如果省略此项,则默认读取到日志末尾或直到读取缓冲区已满,以先到者为准。
要为 指定起始位置
audit_log_read(),请传递一个包含 项目或由和项目start组成的书签 的散列参数 。如果散列参数同时包含 项目和书签,则会发生错误。timestampidstart如果散列参数未指定起始位置,则从当前位置继续读取。
如果时间戳值不包含时间部分,
00:00:00则假定时间部分为 。返回值:
如果调用成功,则返回值是一个
JSON包含审计事件数组的字符串,或者一个 值(如果该值作为参数传递以关闭读取序列)。如果调用失败,返回值为 ,并发生错误。JSONnullNULL例子:
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.0.19 之前,字符串返回值是二进制
JSON字符串。有关将此类值转换为非二进制字符串的信息,请参阅第 6.4.5.6 节,“读取审计日志文件”。返回一个
JSON字符串,表示最近写入的审核日志事件的书签。如果审计日志格式不是JSON,则会发生错误。书签是一个带有和 项目的
JSON散列,用于唯一标识事件在审核日志中的位置。它适合传递给 该函数以指示开始读取的位置。timestampidaudit_log_read()有关审核日志读取过程的更多详细信息,请参阅第 6.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.0.19 之前,字符串返回值是二进制
JSON字符串。有关将此类值转换为非二进制字符串的信息,请参阅第 6.4.5.6 节,“读取审计日志文件”。参数:
没有任何。
返回值:
重命名的文件名。
例子:
mysql> SELECT audit_log_rotate();使用
audit_log_rotate()需要AUDIT_ADMIN特权。
表 6.44 审计日志选项和变量引用
| 姓名 | 命令行 | 选项文件 | 系统变量 | 状态变量 | 可变范围 | 动态的 |
|---|---|---|---|---|---|---|
| 审计日志 | 是的 | 是的 | ||||
| audit_log_buffer_size | 是的 | 是的 | 是的 | 全球的 | 不 | |
| 审计日志压缩 | 是的 | 是的 | 是的 | 全球的 | 不 | |
| audit_log_connection_policy | 是的 | 是的 | 是的 | 全球的 | 是的 | |
| audit_log_current_session | 是的 | 两个都 | 不 | |||
| Audit_log_current_size | 是的 | 全球的 | 不 | |||
| audit_log_disable | 是的 | 是的 | 是的 | 全球的 | 是的 | |
| 审计日志加密 | 是的 | 是的 | 是的 | 全球的 | 不 | |
| Audit_log_event_max_drop_size | 是的 | 全球的 | 不 | |||
| 审计日志事件 | 是的 | 全球的 | 不 | |||
| Audit_log_events_filtered | 是的 | 全球的 | 不 | |||
| Audit_log_events_lost | 是的 | 全球的 | 不 | |||
| Audit_log_events_written | 是的 | 全球的 | 不 | |||
| audit_log_exclude_accounts | 是的 | 是的 | 是的 | 全球的 | 是的 | |
| 审计日志文件 | 是的 | 是的 | 是的 | 全球的 | 不 | |
| audit_log_filter_id | 是的 | 两个都 | 不 | |||
| audit_log_flush | 是的 | 全球的 | 是的 | |||
| 审计日志格式 | 是的 | 是的 | 是的 | 全球的 | 不 | |
| 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_total_size | 是的 | 全球的 | 不 | |||
| Audit_log_write_waits | 是的 | 全球的 | 不 |
本节介绍配置 MySQL Enterprise Audit 操作的命令选项和系统变量。如果在启动时指定的值不正确,
audit_log插件可能无法正确初始化并且服务器不会加载它。在这种情况下,服务器也可能会为其他审核日志设置生成错误消息,因为它无法识别它们。
要配置审核日志插件的激活,请使用此选项:
-
命令行格式 --audit-log[=value]类型 枚举 默认值 ON有效值 ONOFFFORCEFORCE_PLUS_PERMANENT此选项控制服务器
audit_log在启动时如何加载插件。仅当插件先前已注册INSTALL PLUGIN或加载 时才可用--plugin-load或--plugin-load-add。请参阅 第 6.4.5.2 节,“安装或卸载 MySQL Enterprise Audit”。选项值应该是可用于插件加载选项的值之一,如 第 5.6.1 节“安装和卸载插件”中所述。例如,
--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 |
+-----------------------------+--------------+您可以在服务器启动时设置这些变量中的任何一个,也可以在运行时设置其中的一些变量。那些仅适用于遗留模式审核日志过滤的选项已注明。
-
命令行格式 --audit-log-buffer-size=#系统变量 audit_log_buffer_size范围 全球的 动态的 不 SET_VAR提示适用不 类型 整数 默认值 1048576最小值 4096最大值(64 位平台) 18446744073709547520最大值(32 位平台) 4294967295单元 字节 块大小 4096当审计日志插件将事件异步写入日志时,它会在写入事件之前使用一个缓冲区来存储事件内容。此变量控制该缓冲区的大小(以字节为单位)。服务器将值调整为 4096 的倍数。插件使用单个缓冲区,它在初始化时分配并在终止时删除。仅当日志记录是异步的时,插件才会分配此缓冲区。
-
命令行格式 --audit-log-disable[={OFF|ON}]介绍 8.0.28 系统变量 audit_log_disable范围 全球的 动态的 是的 SET_VAR提示适用不 类型 布尔值 默认值 OFF允许为所有连接和已连接的会话禁用审核日志记录。除了
SYSTEM_VARIABLES_ADMIN特权之外,禁用审计日志记录也需要AUDIT_ADMIN特权。请参阅 第 6.4.5.9 节,“禁用审计日志记录”。 -
命令行格式 --audit-log-compression=value系统变量 audit_log_compression范围 全球的 动态的 不 SET_VAR提示适用不 类型 枚举 默认值 NONE有效值 NONEGZIP审计日志文件的压缩类型。允许的值为
NONE(无压缩;默认值)和GZIP(GNU Zip 压缩)。有关详细信息,请参阅 压缩审核日志文件。 -
命令行格式 --audit-log-connection-policy=value系统变量 audit_log_connection_policy范围 全球的 动态的 是的 SET_VAR提示适用不 类型 枚举 默认值 ALL有效值 ALLERRORSNONE笔记此变量仅适用于遗留模式审计日志过滤(请参阅 第 6.4.5.10 节,“遗留模式审计日志过滤”)。
控制审计日志插件如何将连接事件写入其日志文件的策略。下表显示了允许的值。
价值 描述 ALL记录所有连接事件 ERRORS仅记录失败的连接事件 NONE不记录连接事件 笔记在服务器启动时,如 第 6.4.5.5 节“配置审计日志记录特征”
audit_log_connection_policy中所述, 如果还指定了,则可能会覆盖 任何显式的值 。audit_log_policy -
系统变量 audit_log_current_session范围 全局,会话 动态的 不 SET_VAR提示适用不 类型 布尔值 默认值 depends on filtering policy是否为当前会话启用审计日志记录。此变量的会话值是只读的。它是在会话开始时根据
audit_log_include_accounts和audit_log_exclude_accounts系统变量的值设置的。审计日志插件使用会话值来确定是否审计会话的事件。(有一个全局值,但插件不使用它。) -
命令行格式 --audit-log-encryption=value系统变量 audit_log_encryption范围 全球的 动态的 不 SET_VAR提示适用不 类型 枚举 默认值 NONE有效值 NONEAES审计日志文件的加密类型。允许的值为
NONE(无加密;默认值)和AES(AES-256-CBC 密码加密)。有关更多信息,请参阅 加密审计日志文件。 -
命令行格式 --audit-log-exclude-accounts=value系统变量 audit_log_exclude_accounts范围 全球的 动态的 是的 SET_VAR提示适用不 类型 细绳 默认值 NULL笔记此变量仅适用于遗留模式审计日志过滤(请参阅 第 6.4.5.10 节,“遗留模式审计日志过滤”)。
不应记录其事件的帐户。该值应该是
NULL或一个字符串,其中包含一个或多个以逗号分隔的帐户名称的列表。有关详细信息,请参阅 第 6.4.5.7 节,“审计日志过滤”。修改
audit_log_exclude_accounts仅影响修改后创建的连接,而不影响现有连接。 -
命令行格式 --audit-log-file=file_name系统变量 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值确定)的目录作为搜索可读审计日志文件的位置。从这些日志文件和当前文件中,插件构建了一个列表,其中列出了要与审计日志书签和阅读功能一起使用的列表。请参阅 第 6.4.5.6 节,“读取审计日志文件”。 -
系统变量 audit_log_filter_id范围 全局,会话 动态的 不 SET_VAR提示适用不 类型 整数 默认值 1最小值 0最大值 4294967295此变量的会话值指示内部维护的当前会话的审核过滤器的 ID。值 0 表示会话没有分配过滤器。
-
系统变量 audit_log_flush范围 全球的 动态的 是的 SET_VAR提示适用不 类型 布尔值 默认值 OFF笔记audit_log_flush从MySQL 8.0.31 开始不推荐使用 该变量;希望在未来版本的 MySQL 中删除对它的支持。它被audit_log_rotate()函数取代。如果
audit_log_rotate_on_size为 0,则禁用自动审计日志文件轮换,轮换仅在手动执行时发生。在这种情况下,audit_log_flush通过将其设置为 1 或ON导致审计日志插件关闭并重新打开其日志文件以刷新它来启用。(变量值保留OFF,因此您无需在再次启用它以执行另一次刷新之前明确禁用它。)有关更多信息,请参阅 第 6.4.5.5 节,“配置审计日志记录特征”。 -
命令行格式 --audit-log-format=value系统变量 audit_log_format范围 全球的 动态的 不 SET_VAR提示适用不 类型 枚举 默认值 NEW有效值 OLDNEWJSON审核日志文件格式。允许的值为
OLD(旧式 XML)、NEW(新式 XML;默认值)和JSON. 有关每种格式的详细信息,请参阅第 6.4.5.4 节,“审计日志文件格式”。 audit_log_format_unix_timestamp命令行格式 --audit-log-format-unix-timestamp[={OFF|ON}]介绍 8.0.26 系统变量 audit_log_format_unix_timestamp范围 全球的 动态的 是的 SET_VAR提示适用不 类型 布尔值 默认值 OFF此变量仅适用于 JSON 格式的审计日志输出。如果为真,启用此变量会导致每个日志文件记录包含一个
time字段。字段值是一个整数,表示 UNIX 时间戳值,指示生成审计事件的日期和时间。在运行时更改此变量的值会导致日志文件轮换,因此对于给定的 JSON 格式日志文件,文件中的所有记录都包含或不包含该
time字段。除了 设置全局系统变量运行时值通常需要 的 特权(或已弃用的 特权)之外, 设置 的运行时值 还
audit_log_format_unix_timestamp需要特权。AUDIT_ADMINSYSTEM_VARIABLES_ADMINSUPER-
命令行格式 --audit-log-include-accounts=value系统变量 audit_log_include_accounts范围 全球的 动态的 是的 SET_VAR提示适用不 类型 细绳 默认值 NULL笔记此变量仅适用于遗留模式审计日志过滤(请参阅 第 6.4.5.10 节,“遗留模式审计日志过滤”)。
应记录事件的帐户。该值应该是
NULL或一个字符串,其中包含一个或多个以逗号分隔的帐户名称的列表。有关详细信息,请参阅 第 6.4.5.7 节,“审计日志过滤”。修改
audit_log_include_accounts仅影响修改后创建的连接,而不影响现有连接。 -
命令行格式 --audit-log-max-size=#介绍 8.0.26 系统变量 audit_log_max_size范围 全球的 动态的 是的 SET_VAR提示适用不 类型 整数 默认值 0最小值 0最大值 (Windows) 4294967295最大值(其他) 18446744073709551615单元 字节 块大小 4096audit_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应该是 的 7 倍以上audit_log_rotate_on_size。否则,将向服务器错误日志写入一条警告,因为在这种情况下,基于大小的修剪的“粒度”可能不足以防止每次发生时删除所有或大部分旋转日志文件。笔记设置
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=#介绍 8.0.17 系统变量 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 的值时。运行时值更改发生在 使用or 关键字的SET语句,而不是 关键字。 将变量设置写入,但对运行时值没有影响。GLOBALPERSISTPERSIST_ONLYPERSIST_ONLYmysqld-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_ADMINSYSTEM_VARIABLES_ADMINSUPER-
命令行格式 --audit-log-policy=value系统变量 audit_log_policy范围 全球的 动态的 不 SET_VAR提示适用不 类型 枚举 默认值 ALL有效值 ALLLOGINSQUERIESNONE笔记此变量仅适用于遗留模式审计日志过滤(请参阅 第 6.4.5.10 节,“遗留模式审计日志过滤”)。
控制审计日志插件如何将事件写入其日志文件的策略。下表显示了允许的值。
价值 描述 ALL记录所有事件 LOGINS仅记录登录事件 QUERIES仅记录查询事件 NONE什么都不记录(禁用审计流) audit_log_policy只能在服务器启动时设置。在运行时,它是一个只读变量。另外两个系统变量audit_log_connection_policy和audit_log_statement_policy提供了对日志记录策略的更精细控制,可以在启动时或运行时设置。如果您audit_log_policy在启动时使用而不是其他两个变量,服务器将使用它的值来设置这些变量。有关策略变量及其交互的更多信息,请参阅 第 6.4.5.5 节,“配置审计日志记录特征”。 -
命令行格式 --audit-log-prune-seconds=#介绍 8.0.24 系统变量 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适用范围(≥ 8.0.12) 全局,会话 范围 (8.0.11) 全球的 动态(≥ 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单元 字节 从审计日志文件中读取的缓冲区大小,以字节为单位。该
audit_log_read()函数读取的字节数不超过这么多。仅支持 JSON 日志格式的日志文件读取。有关详细信息,请参阅第 6.4.5.6 节,“读取审计日志文件”。从 MySQL 8.0.12 开始,这个变量默认为 32KB,可以在运行时设置。每个客户端都应将其会话值设置为
audit_log_read_buffer_size适合其对audit_log_read(). 在 MySQL 8.0.12 之前,audit_log_read_buffer_size默认值为 1MB,影响所有客户端,并且只能在服务器启动时更改。 -
命令行格式 --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,并且不会发生旋转,除非手动进行。笔记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有效值 ALLERRORSNONE笔记此变量仅适用于遗留模式审计日志过滤(请参阅 第 6.4.5.10 节,“遗留模式审计日志过滤”)。
控制审计日志插件如何将语句事件写入其日志文件的策略。下表显示了允许的值。
价值 描述 ALL记录所有语句事件 ERRORS仅记录失败的语句事件 NONE不记录语句事件 笔记在服务器启动时,如 第 6.4.5.5 节“配置审计日志记录特征”
audit_log_statement_policy中所述, 如果还指定了,则可能会覆盖 任何显式的值 。audit_log_policy -
命令行格式 --audit-log-strategy=value系统变量 audit_log_strategy范围 全球的 动态的 不 SET_VAR提示适用不 类型 枚举 默认值 ASYNCHRONOUS有效值 ASYNCHRONOUSPERFORMANCESEMISYNCHRONOUSSYNCHRONOUS审计日志插件使用的日志记录方法。这些策略值是允许的:
ASYNCHRONOUS: 异步登录。等待输出缓冲区中的空间。PERFORMANCE: 异步登录。丢弃输出缓冲区中空间不足的请求。SEMISYNCHRONOUS: 同步登录。允许操作系统缓存。SYNCHRONOUS: 同步登录。sync()每次请求后 调用。
如果启用了审计日志插件,它会公开几个提供操作信息的状态变量。这些变量可用于遗留模式审计过滤和 JSON 模式审计过滤。
当前审计日志文件的大小。当事件写入日志时该值会增加,而当日志轮换时该值会重置为 0。
性能日志记录模式下最大丢弃事件的大小。有关日志记录模式的说明,请参阅 第 6.4.5.5 节,“配置审计日志记录特征”。
审计日志插件处理的事件数,无论它们是否根据过滤策略写入日志(请参阅 第 6.4.5.5 节,“配置审计日志记录特征”)。
根据过滤策略过滤(未写入日志)的审计日志插件处理的事件数(请参阅 第 6.4.5.5 节,“配置审计日志记录特征”)。
由于事件大于可用审计日志缓冲区空间而在性能日志记录模式下丢失的事件数。此值可能有助于评估如何设置
audit_log_buffer_size性能模式的缓冲区大小。有关日志记录模式的说明,请参阅 第 6.4.5.5 节,“配置审计日志记录特征”。写入审计日志的事件数。
写入所有审计日志文件的事件的总大小。与 不同 的是, 即使轮换日志
Audit_log_current_size,值 也会增加。Audit_log_total_size在异步日志记录模式下,事件必须等待审计日志缓冲区中的空间的次数。有关日志记录模式的说明,请参阅 第 6.4.5.5 节,“配置审计日志记录特征”。