6.4.5.10 审核日志参考

以下讨论可作为对 MySQL 企业审核组件的参考:

要安装审核日志 table 和功能,请使用第 6.4.5.2 节“安装或卸载 MySQL 企业审核”中提供的说明。除非安装了这些组件,否则audit_log插件将在旧版模式下运行。参见第 6.4.5.9 节“旧模式审核日志过滤”

审核日志 table

MySQL Enterprise Audit 使用mysql系统数据库中的 table 来永久存储过滤器和用户帐户数据。只有具有该数据库特权的用户才能访问这些 table。这些 table 使用InnoDB存储引擎(MySQL 5.7.21 之前的MyISAM)。

如果缺少这些 table,则audit_log插件将在旧版模式下运行。参见第 6.4.5.9 节“旧模式审核日志过滤”

audit_log_filtertable 存储过滤器定义。该 table 包含以下列:

过滤器名称。

与过滤器名称关联的过滤器定义。定义存储为JSON个值。

audit_log_usertable 存储用户帐户信息。该 table 包含以下列:

帐户的用户名部分。对于帐户user1@localhostUSER部分为user1

帐户的主机名部分。对于帐户user1@localhostHOST部分为localhost

分配给该帐户的过滤器的名称。过滤器名称将帐户与在audit_log_filtertable 中定义的过滤器相关联。

审核日志功能

本节针对每个审核日志用户定义函数(UDF)描述其用途,调用 Sequences 和返回值。有关可以调用这些 UDF 的条件的信息,请参见第 6.4.5.7 节“审核日志过滤”

每个审核日志 UDF 返回一个字符串,该字符串指示操作是否成功。 OKtable 示成功。 ERROR: messagetable 示失败。

这些审核日志 UDF 可用:

以二进制字符串形式检索当前的审核日志加密密码。密码是从 MySQL 密钥环中获取的,必须启用该密钥,否则会发生错误。任何钥匙圈插件都可以使用;有关说明,请参见第 6.4.4 节“ MySQL 密钥环”

有关审核日志加密的其他信息,请参阅加密审核日志文件

Arguments:

None.

Return value:

成功的密码字符串(最大 766 个字节),或NULL,失败的错误。

Example:

mysql> SELECT audit_log_encryption_password_get();
+-------------------------------------+
| audit_log_encryption_password_get() |
+-------------------------------------+
| secret                              |
+-------------------------------------+

将审核日志加密密码设置为参数,并将密码存储在 MySQL 密钥环中。如果启用了加密,该功能将执行日志文件轮换操作,重命名当前日志文件,并开始使用密码加密的新日志文件。必须启用密钥环,否则会发生错误。任何钥匙圈插件都可以使用;有关说明,请参见第 6.4.4 节“ MySQL 密钥环”

有关审核日志加密的其他信息,请参阅加密审核日志文件

Arguments:

Return value:

1 table 示成功,0table 示失败。

Example:

mysql> SELECT audit_log_encryption_password_set(password);
+---------------------------------------------+
| audit_log_encryption_password_set(password) |
+---------------------------------------------+
| 1                                           |
+---------------------------------------------+

调用任何其他筛选 UDF 都会立即影响操作审核日志筛选,并更新审核日志 table。相反,如果直接使用INSERTUPDATEDELETE等语句修改这些 table 的内容,则更改不会立即影响过滤。要刷新您的更改并使它们可操作,请调用audit_log_filter_flush()

Warning

仅在直接修改审核 table 之后才能使用audit_log_filter_flush(),以强制重新加载所有过滤器。否则,应避免使用此功能。实际上,它是使用UNINSTALL PLUGININSTALL PLUGIN卸载和重新加载audit_log插件的简化版本。

audit_log_filter_flush()影响所有当前会话,并将它们与以前的过滤器分离。除非断开并重新连接或执行更改用户操作,否则将不再记录当前会话。

如果此功能失败,则返回错误消息并禁用审核日志,直到下一次成功调用audit_log_filter_flush()为止。

Arguments:

None.

Return value:

指示操作是否成功的字符串。 OKtable 示成功。 ERROR: messagetable 示失败。

Example:

mysql> SELECT audit_log_filter_flush();
+--------------------------+
| audit_log_filter_flush() |
+--------------------------+
| OK                       |
+--------------------------+

给定一个过滤器名称,将其从当前过滤器集中删除。过滤器不存在不是错误。

如果将删除的过滤器分配给任何用户帐户,则这些用户将停止过滤(将它们从audit_log_usertable 中删除)。过滤终止包括这些用户的任何当前会话:它们与过滤器分离并且不再记录。

Arguments:

Return value:

指示操作是否成功的字符串。 OKtable 示成功。 ERROR: messagetable 示失败。

Example:

mysql> SELECT audit_log_filter_remove_filter('SomeFilter');
+----------------------------------------------+
| audit_log_filter_remove_filter('SomeFilter') |
+----------------------------------------------+
| OK                                           |
+----------------------------------------------+

给定用户帐户名,导致不再将用户分配给过滤器。如果用户未分配过滤器,这不是错误。用户当前会话的过滤不受影响。如果有新连接,则使用默认帐户过滤器过滤用户的新连接,否则将不记录。

如果名称为%,该函数将删除默认帐户过滤器,该过滤器将用于没有明确分配过滤器的任何用户帐户。

Arguments:

Return value:

指示操作是否成功的字符串。 OKtable 示成功。 ERROR: messagetable 示失败。

Example:

mysql> SELECT audit_log_filter_remove_user('user1@localhost');
+-------------------------------------------------+
| audit_log_filter_remove_user('user1@localhost') |
+-------------------------------------------------+
| OK                                              |
+-------------------------------------------------+

给定过滤器名称和定义,将过滤器添加到当前过滤器集合中。如果该过滤器已经存在并被任何当前会话使用,则这些会话将从过滤器中分离出来,不再记录。发生这种情况是因为新的过滤器定义具有不同于其先前 ID 的新过滤器 ID。

Arguments:

Return value:

指示操作是否成功的字符串。 OKtable 示成功。 ERROR: messagetable 示失败。

Example:

mysql> SET @f = '{ "filter": { "log": false } }';
mysql> SELECT audit_log_filter_set_filter('SomeFilter', @f);
+-----------------------------------------------+
| audit_log_filter_set_filter('SomeFilter', @f) |
+-----------------------------------------------+
| OK                                            |
+-----------------------------------------------+

给定用户帐户名和过滤器名称,将过滤器分配给用户。只能为一个用户分配一个过滤器,因此,如果已经为该用户分配了过滤器,则该分配将被替换。用户当前会话的过滤不受影响。使用新的过滤器过滤新的连接。

在特殊情况下,名称%代 table 默认帐户。该筛选器用于来自没有明确分配筛选器的任何用户帐户的连接。

Arguments:

Return value:

指示操作是否成功的字符串。 OKtable 示成功。 ERROR: messagetable 示失败。

Example:

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字符串。哈希参数中的项目会影响读取的方式,如下所述。返回数组中的每个元素都是一个 table 示为JSON哈希的事件,但最后一个元素可能是JSON null值以指示没有后续事件可读取。

带有由JSON null值组成的参数,audit_log_read()关闭当前的读取序列。

有关审核日志读取过程的其他详细信息,请参阅第 6.4.5.6 节“读取审核日志文件”

Arguments:

要获取最近写入的事件的书签,请致电audit_log_read_bookmark()

Return value:

如果调用成功,则返回值为包含审核事件数组的二进制JSON字符串,或者返回JSON null值(如果已将其作为参数关闭关闭读取序列)。如果调用失败,则返回值为NULL并发生错误。

Example:

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                   |
+------------------------+

返回二进制JSON字符串,table 示最近写入的审核日志事件的书签。如果审核日志格式不是JSON,则会发生错误。

书签是带有timestampid项的JSON哈希,它们唯一地标识事件在审计日志中的位置。适用于传递到audit_log_read()以指示该功能开始读取的位置。

有关审核日志读取过程的其他详细信息,请参阅第 6.4.5.6 节“读取审核日志文件”

Arguments:

None.

Return value:

二进制JSON字符串,包含用于成功的书签,或NULL和用于失败的错误。

Example:

mysql> SELECT audit_log_read_bookmark();
+-------------------------------------------------+
| audit_log_read_bookmark()                       |
+-------------------------------------------------+
| { "timestamp": "2019-10-03 21:03:44", "id": 0 } |
+-------------------------------------------------+
审核日志选项和变量参考

table6.34 审核日志选项和变量参考

Name Cmd-Line Option File System Var Status Var Var Scope Dynamic
audit-log Yes Yes
audit_log_buffer_size Yes Yes Yes Global No
audit_log_compression Yes Yes Yes Global No
audit_log_connection_policy Yes Yes Yes Global Yes
audit_log_current_session Yes Both No
Audit_log_current_size Yes Global No
audit_log_encryption Yes Yes Yes Global No
Audit_log_event_max_drop_size Yes Global No
Audit_log_events Yes Global No
Audit_log_events_filtered Yes Global No
Audit_log_events_lost Yes Global No
Audit_log_events_written Yes Global No
audit_log_exclude_accounts Yes Yes Yes Global Yes
audit_log_file Yes Yes Yes Global No
audit_log_filter_id Yes Both No
audit_log_flush Yes Global Yes
audit_log_format Yes Yes Yes Global No
audit_log_include_accounts Yes Yes Yes Global Yes
audit_log_policy Yes Yes Yes Global No
audit_log_read_buffer_size Yes Yes Yes Varies Varies
audit_log_rotate_on_size Yes Yes Yes Global Yes
audit_log_statement_policy Yes Yes Yes Global Yes
audit_log_strategy Yes Yes Yes Global No
Audit_log_total_size Yes Global No
Audit_log_write_waits Yes Global No
审核日志选项和变量

本节介绍了配置 MySQL Enterprise Audit 操作的命令选项和系统变量。如果启动时指定的值不正确,则audit_log插件可能无法正确初始化,并且服务器不会加载它。在这种情况下,服务器也可能会为其他审核日志设置生成错误消息,因为它无法识别它们。

要配置审核日志插件的激活,请使用以下选项:

Property Value
Command-Line Format --audit-log[=value]
Type Enumeration
Default Value ON
Valid Values ON

OFF
FORCE
FORCE_PLUS_PERMANENT

此选项控制服务器在启动时如何加载audit_log插件。仅当插件先前已在INSTALL PLUGIN注册或已在--plugin-load--plugin-load-add加载时才可用。参见第 6.4.5.2 节“安装或卸载 MySQL 企业审核”

该选项值应该是插件加载选项可用的值之一,如第 5.5.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 |
+-----------------------------+--------------+

您可以在服务器启动时设置这些变量中的任何一个,在运行时设置其中一些。请注意那些仅可用于旧模式审核日志过滤的内容。

Property Value
Command-Line Format --audit-log-buffer-size=#
System Variable audit_log_buffer_size
Scope Global
Dynamic No
Type Integer
Default Value 1048576
Minimum Value 4096
最大值(64 位平台) 18446744073709547520
最大值(32 位平台) 4294967295

当审核日志插件将事件异步写入日志时,它将在写入事件之前使用缓冲区存储事件内容。此变量控制该缓冲区的大小(以字节为单位)。服务器将值调整为 4096 的倍数。插件使用单个缓冲区,它在初始化时分配,在终止时删除。仅当日志记录异步时,插件才会分配此缓冲区。

Property Value
Command-Line Format --audit-log-compression=value
Introduced 5.7.21
System Variable audit_log_compression
Scope Global
Dynamic No
Type Enumeration
Default Value NONE
Valid Values NONE

GZIP

审核日志文件的压缩类型。允许的值为NONE(不压缩;默认值)和GZIP(GNU Zip 压缩)。有关更多信息,请参见压缩审核日志文件

Property Value
Command-Line Format --audit-log-connection-policy=value
System Variable audit_log_connection_policy
Scope Global
Dynamic Yes
Type Enumeration
Default Value ALL
Valid Values ALL

ERRORS
NONE

Note

此变量仅适用于旧模式审核日志过滤(请参阅第 6.4.5.9 节“旧模式审核日志过滤”)。

控制审核日志插件如何将连接事件写入其日志文件的策略。下 table 显示了允许的值。

Value Description
ALL 记录所有连接事件
ERRORS 仅记录失败的连接事件
NONE 不记录连接事件

Note

第 6.4.5.5 节“配置审核日志记录 Feature”中所述,在服务器启动时,如果还指定了audit_log_policy,则可以覆盖为audit_log_connection_policy给出的任何显式值。

Property Value
System Variable audit_log_current_session
Scope Global, Session
Dynamic No
Type Boolean
Default Value depends on filtering policy

当前会话是否启用审核日志记录。该变量的会话值是只读的。在会话开始时根据audit_log_include_accountsaudit_log_exclude_accounts系统变量的值进行设置。审核日志插件使用会话值来确定是否审核该会话的事件。 (有一个全局值,但是插件不使用它.)

Property Value
Command-Line Format --audit-log-encryption=value
Introduced 5.7.21
System Variable audit_log_encryption
Scope Global
Dynamic No
Type Enumeration
Default Value NONE
Valid Values NONE

AES

审核日志文件的加密类型。允许的值为NONE(不加密;默认值)和AES(AES-256-CBC 密码加密)。有关更多信息,请参见加密审核日志文件

Property Value
Command-Line Format --audit-log-exclude-accounts=value
System Variable audit_log_exclude_accounts
Scope Global
Dynamic Yes
Type String
Default Value NULL

Note

此变量仅适用于旧模式审核日志过滤(请参阅第 6.4.5.9 节“旧模式审核日志过滤”)。

不应记录事件的帐户。该值应为NULL或包含一个或多个逗号分隔帐户名列 table 的字符串。有关更多信息,请参见第 6.4.5.7 节“审核日志过滤”

audit_log_exclude_accounts的修改仅影响在修改之后创建的连接,而不影响现有的连接。

Property Value
Command-Line Format --audit-log-file=file_name
System Variable audit_log_file
Scope Global
Dynamic No
Type File name
Default Value audit.log

审核日志插件向其写入事件的文件的基本名称和后缀。无论记录格式如何,默认值为audit.log。要使名称后缀与格式相对应,请显式设置名称,并选择其他后缀(例如,对于 XML 格式为audit.xml,对于 JSON 格式为audit.json)。

如果audit_log_file的值是相对路径名,则插件将相对于数据目录对其进行解释。如果该值是完整路径名,那么插件将按原样使用该值。如果希望将审核文件放在单独的文件系统或目录中,则完整路径名可能很有用。出于安全原因,请将审核日志文件写入只有 MySQL 服务器和有正当理由查看日志的用户才能访问的目录。

有关审核日志插件如何解释audit_log_file值以及在插件初始化和终止时发生的文件重命名规则的详细信息,请参阅审核日志文件的命名约定

从 MySQL 5.7.21 开始,审核日志插件使用包含审核日志文件(由audit_log_file值确定)的目录作为搜索可读审核日志文件的位置。从这些日志文件和当前文件中,插件将构建一个列 table,这些列 table 将与审核日志书签和读取功能一起使用。参见第 6.4.5.6 节“读取审核日志文件”

Property Value
Introduced 5.7.13
System Variable audit_log_filter_id
Scope Global, Session
Dynamic No
Type Integer

该变量的会话值指示当前会话的审核过滤器的内部维护 ID。值 0table 示会话未分配过滤器。

Property Value
System Variable audit_log_flush
Scope Global
Dynamic Yes
Type Boolean
Default Value OFF

当将此变量设置为启用(1 或ON)时,审核日志插件将关闭并重新打开其日志文件以刷新它。 (该值仍为OFF,因此您无需在再次启用它执行另一个刷新之前就明确禁用它.)除非audit_log_rotate_on_size为 0,否则启用此变量无效。有关更多信息,请参见第 6.4.5.5 节“配置审核日志记录 Feature”

Property Value
Command-Line Format --audit-log-format=value
System Variable audit_log_format
Scope Global
Dynamic No
Type Enumeration
Default Value NEW
有效值(≥5.7.21) OLD

NEW
JSON
有效值(≤5.7.20) OLD
NEW

审核日志文件格式。允许值为OLD(旧式 XML),NEW(新式 XML;默认值)和(自 MySQL 5.7.21 起)JSON。有关每种格式的详细信息,请参见第 6.4.5.4 节“审核日志文件格式”

Note

有关更改日志格式时要考虑的问题的信息,请参阅选择审核日志文件格式

Property Value
Command-Line Format --audit-log-include-accounts=value
System Variable audit_log_include_accounts
Scope Global
Dynamic Yes
Type String
Default Value NULL

Note

此变量仅适用于旧模式审核日志过滤(请参阅第 6.4.5.9 节“旧模式审核日志过滤”)。

应记录事件的帐户。该值应为NULL或包含一个或多个逗号分隔帐户名列 table 的字符串。有关更多信息,请参见第 6.4.5.7 节“审核日志过滤”

audit_log_include_accounts的修改仅影响在修改之后创建的连接,而不影响现有的连接。

Property Value
Command-Line Format --audit-log-policy=value
System Variable audit_log_policy
Scope Global
Dynamic No
Type Enumeration
Default Value ALL
Valid Values ALL

LOGINS
QUERIES
NONE

Note

此变量仅适用于旧模式审核日志过滤(请参阅第 6.4.5.9 节“旧模式审核日志过滤”)。

控制审核日志插件如何将事件写入其日志文件的策略。下 table 显示了允许的值。

Value Description
ALL 记录所有事件
LOGINS 仅记录登录事件
QUERIES 仅记录查询事件
NONE 不记录任何内容(禁用审核流)

只能在服务器启动时设置audit_log_policy。在运行时,它是一个只读变量。另外两个系统变量audit_log_connection_policyaudit_log_statement_policy可以更好地控制日志记录策略,可以在启动时或运行时进行设置。如果在启动时使用audit_log_policy而不是其他两个变量,则服务器将使用其值来设置这些变量。有关策略变量及其相互作用的更多信息,请参见第 6.4.5.5 节“配置审核日志记录 Feature”

Property Value
Command-Line Format --audit-log-read-buffer-size=#
Introduced 5.7.21
System Variable audit_log_read_buffer_size
范围(≥5.7.23) Global, Session
范围(≤5.7.22) Global
动态(≥5.7.23) Yes
动态(≤5.7.22) No
Type Integer
默认值(≥5.7.23) 32768
预设值(≤5.7.22) 1048576
最小值(≥5.7.23) 32768
最小值(≤5.7.22) 1024
Maximum Value 4194304

从审核日志文件读取的缓冲区大小,以字节为单位。 audit_log_read()函数读取的字节数不超过此数量。仅 JSON 日志格式支持日志文件读取。有关更多信息,请参见第 6.4.5.6 节“读取审核日志文件”

从 MySQL 5.7.23 开始,此变量的默认值为 32KB,可以在运行时设置。每个 Client 端都应将其会话值设置为audit_log_read_buffer_size以便使用audit_log_read()。在 MySQL 5.7.23 之前,audit_log_read_buffer_size的默认值为 1MB,会影响所有 Client 端,并且只能在服务器启动时进行更改。

Property Value
Command-Line Format --audit-log-rotate-on-size=#
System Variable audit_log_rotate_on_size
Scope Global
Dynamic Yes
Type Integer
Default Value 0

如果audit_log_rotate_on_size的值为 0,则审核日志插件不会执行自动日志文件轮换。而是使用audit_log_flush关闭并按需重新打开日志。在这种情况下,请在刷新文件之前在服务器外部手动重命名该文件。

如果audit_log_rotate_on_size值大于 0,则会自动进行基于大小的日志文件轮换。每当写入日志文件导致其大小超过audit_log_rotate_on_size值时,审核日志插件都会关闭当前日志文件,将其重命名,然后打开一个新的日志文件。

有关审核日志文件轮换的更多信息,请参见审计日志文件的空间 Management 和名称轮换

如果将此变量设置为不是 4096 的倍数的值,它将被截断为最接近的倍数。 (因此,将其设置为小于 4096 的效果是将其设置为 0 且不进行旋转,除非手动进行.)

Property Value
Command-Line Format --audit-log-statement-policy=value
System Variable audit_log_statement_policy
Scope Global
Dynamic Yes
Type Enumeration
Default Value ALL
Valid Values ALL

ERRORS
NONE

Note

此变量仅适用于旧模式审核日志过滤(请参阅第 6.4.5.9 节“旧模式审核日志过滤”)。

控制审核日志插件如何将语句事件写入其日志文件的策略。下 table 显示了允许的值。

Value Description
ALL 记录所有语句事件
ERRORS 仅记录失败的语句事件
NONE 不记录语句事件

Note

第 6.4.5.5 节“配置审核日志记录 Feature”中所述,在服务器启动时,如果还指定了audit_log_policy,则可以覆盖为audit_log_statement_policy给出的任何显式值。

Property Value
Command-Line Format --audit-log-strategy=value
System Variable audit_log_strategy
Scope Global
Dynamic No
Type Enumeration
Default Value ASYNCHRONOUS
Valid Values ASYNCHRONOUS

PERFORMANCE
SEMISYNCHRONOUS
SYNCHRONOUS

审核日志插件使用的日志记录方法。允许使用以下策略值:

审核日志状态变量

如果启用了审核日志插件,则它会公开几个提供操作信息的状态变量。这些变量可用于旧模式审核过滤和 JSON 模式审核过滤。

当前审核日志文件的大小。当事件写入日志时,该值增加;旋转日志时,该值重置为 0.

性能记录模式下最大丢弃事件的大小。有关日志记录模式的说明,请参见第 6.4.5.5 节“配置审核日志记录 Feature”

审核日志插件处理的事件数,无论是否基于过滤策略将其写入日志(请参见第 6.4.5.5 节“配置审核日志记录 Feature”)。

由审计日志插件处理的基于过滤策略(未写入日志)的事件数(请参见第 6.4.5.5 节“配置审核日志记录 Feature”)。

由于事件大于可用审核日志缓冲区空间,因此在性能日志记录模式下丢失的事件数。该值对于评估如何设置audit_log_buffer_size来调整性能模式缓冲区的大小可能很有用。有关日志记录模式的说明,请参见第 6.4.5.5 节“配置审核日志记录 Feature”

写入审核日志的事件数。

写入所有审核日志文件的事件的总大小。与Audit_log_current_size不同,即使旋转日志,Audit_log_total_size的值也会增加。

在异步日志记录模式下,事件必须 await 审核日志缓冲区中的空间的次数。有关日志记录模式的说明,请参见第 6.4.5.5 节“配置审核日志记录 Feature”

首页