审核日志插件可以过滤审核事件。这使您可以控制审核事件是否写入审核日志文件,基于事件的来源账户或事件状态。状态过滤分别应用于连接事件和语句事件。
要根据来源账户过滤审核事件,请在服务器启动或运行时设置以下系统变量之一。这些已弃用的变量仅适用于遗留审核日志过滤。
-
audit_log_include_accounts
:要包括在审核日志中的账户。如果设置了这个变量,只有这些账户将被审核。 -
audit_log_exclude_accounts
:要从审核日志中排除的账户。如果设置了这个变量,除了这些账户外的所有账户将被审核。
这两个变量的值可以是 NULL
或包含一个或多个以逗号分隔的账户名称的字符串,每个账户名称以
格式。默认情况下,两个变量都是 user_name
@host_name
NULL
,因此不会进行账户过滤,所有账户都将被审核。
对 audit_log_include_accounts
或 audit_log_exclude_accounts
的修改仅影响后续创建的连接,而不影响现有的连接。
示例:要仅对 user1
和 user2
本地主机账户启用审核日志,请设置 audit_log_include_accounts
系统变量如下:
SET GLOBAL audit_log_include_accounts = 'user1@localhost,user2@localhost';
只能同时设置 audit_log_include_accounts
或 audit_log_exclude_accounts
一个非 NULL
值:
-
如果您设置
audit_log_include_accounts
,服务器将audit_log_exclude_accounts
设置为NULL
。 -
如果您尝试设置
audit_log_exclude_accounts
,除非audit_log_include_accounts
为NULL
,否则将出现错误。在这种情况下,您必须首先清除audit_log_include_accounts
,将其设置为NULL
。
-- This sets audit_log_exclude_accounts to NULL
SET GLOBAL audit_log_include_accounts = value;
-- This fails because audit_log_include_accounts is not NULL
SET GLOBAL audit_log_exclude_accounts = value;
-- To set audit_log_exclude_accounts, first set
-- audit_log_include_accounts to NULL
SET GLOBAL audit_log_include_accounts = NULL;
SET GLOBAL audit_log_exclude_accounts = value;
如果您检查变量的值,请注意SHOW VARIABLES
将NULL
显示为空字符串。要显示NULL
为NULL
,请使用SELECT
语句。
mysql> SHOW VARIABLES LIKE 'audit_log_include_accounts';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| audit_log_include_accounts | |
+----------------------------+-------+
mysql> SELECT @@audit_log_include_accounts;
+------------------------------+
| @@audit_log_include_accounts |
+------------------------------+
| NULL |
+------------------------------+
如果用户名或主机名包含逗号、空格或其他特殊字符,需要使用单引号引号。如果变量值本身用单引号引号,请双引号或使用反斜杠转义。以下语句每个都启用了对本地root
帐户的审核日志记录,并且尽管引号样式不同,但它们是等效的:
SET GLOBAL audit_log_include_accounts = 'root@localhost';
SET GLOBAL audit_log_include_accounts = '''root''@''localhost''';
SET GLOBAL audit_log_include_accounts = '\'root\'@\'localhost\'';
SET GLOBAL audit_log_include_accounts = "'root'@'localhost'";
如果启用了ANSI_QUOTES
SQL 模式,最后一个语句将不起作用,因为在该模式下双引号表示标识符引号,而不是字符串引号。
要根据状态过滤审核事件,请在服务器启动或运行时设置以下系统变量。这些弃用变量仅适用于遗留审核日志过滤。对于 JSON 审核日志过滤,应用不同的状态变量;请参阅审核日志选项和变量。
-
audit_log_connection_policy
:连接事件的日志策略 -
audit_log_statement_policy
:语句事件的日志策略
每个变量都可以取值ALL
(记录所有相关事件;这是默认值),ERRORS
(仅记录失败事件)或NONE
(不记录事件)。例如,要记录所有语句事件但仅记录失败的连接事件,请使用以下设置:
SET GLOBAL audit_log_statement_policy = ALL;
SET GLOBAL audit_log_connection_policy = ERRORS;
另一个策略系统变量:audit_log_policy
, 可用,但不如audit_log_connection_policy
和audit_log_statement_policy
提供的控制那么多。它只能在服务器启动时设置。
遗留模式系统变量audit_log_policy
已弃用。
在运行时,它是一个只读变量。它可以取值:ALL
(记录所有事件,默认值),LOGINS
(记录连接事件),QUERIES
(记录语句事件),或NONE
(不记录事件)。对于这些值,审核日志插件将记录所有选定的事件,而不区分成功或失败。使用audit_log_policy
在启动时的工作方式如下:
-
如果您不设置
audit_log_policy
或将其设置为默认值ALL
,那么任何明确的audit_log_connection_policy
或audit_log_statement_policy
设置将应用于指定的值。如果未指定,它们将默认为ALL
。 -
如果您将
audit_log_policy
设置为非ALL
值,那么该值将优先于audit_log_connection_policy
和audit_log_statement_policy
,如下表所示。如果您还将其中一个变量设置为非默认值ALL
,服务器将在错误日志中写入一条消息,指示其值被覆盖。启动audit_log_policy值 结果audit_log_connection_policy值 结果audit_log_statement_policy值 LOGINS
ALL
NONE
QUERIES
NONE
ALL
NONE
NONE
NONE