传统模式审核日志过滤
注意本节描述了旧式审核日志筛选,如果
udit_log
安装了插件,则适用于旧审核日志筛选,但不适用于基于规则的筛选所需的随附审核表和UDF。
审核日志插件可以过滤审核的事件。这使您可以根据事件起源的帐户或事件状态来控制是否将已审计的事件写入审计日志文件。对于连接事件和语句事件,状态筛选分别发生。
- 按帐户进行事件过滤
- 按状态过滤事件
按帐户进行事件过滤
要基于原始帐户过滤审核的事件,请在服务器启动或运行时设置以下系统变量之一:
udit_log_include_accounts
:要包括在审核日志记录中的帐户。如果设置了此变量,则仅审核这些帐户。udit_log_exclude_accounts
:要从审计日志中排除的帐户。如果设置了此变量,将审核除这些帐户以外的所有帐户。
变量的值可以是NULL
或包含一个或多个以逗号分隔的帐户名的字符串,每个帐户名均采用格式。默认情况下,两个变量均为,在这种情况下,不进行帐户过滤,并且对所有帐户进行审核。user_name@host_name
NULL
修改 udit_log_include_accounts
或 udit_log_exclude_accounts
仅影响修改后创建的连接,不影响现有连接。
示例:要仅对user1
和user2
本地主机帐户帐户启用审核日志记录,请按以下方式设置 udit_log_include_accounts
系统变量:
SET GLOBAL audit_log_include_accounts = 'user1@localhost,user2@localhost';
一次只能 udit_log_include_accounts
或 udit_log_exclude_accounts
不能之一NULL
:
- 如果设置
udit_log_include_accounts
,则服务器设置udit_log_exclude_accounts
为NULL
。 - 如果你试图设置
udit_log_exclude_accounts
,除非发生错误udit_log_include_accounts
的NULL
。在这种情况下,必须首先udit_log_include_accounts
将其设置为进行清除NULL
。
-- This sets audit_log_exclude_accounts to NULLSET GLOBAL audit_log_include_accounts = value; -- This fails because audit_log_include_accounts is not NULLSET GLOBAL audit_log_exclude_accounts = value; -- To set audit_log_exclude_accounts, first set -- audit_log_include_accounts to NULLSET GLOBAL audit_log_include_accounts = NULL;SET GLOBAL audit_log_exclude_accounts = value;
如果检查两个变量的值,请注意将SHOW VARIABLES
显示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审核日志过滤,将应用不同的状态变量。请参阅审核日志选项和变量。
udit_log_connection_policy
:连接事件的日志记录策略udit_log_statement_policy
:语句事件的记录策略
每个变量的值分别为ALL
(记录所有关联的事件;这是默认值),ERRORS
(仅记录失败的事件)或NONE
(不记录事件)。例如,要记录所有语句事件但仅记录失败的连接事件,请使用以下设置:
SET GLOBAL audit_log_statement_policy =ALL ;SET GLOBAL audit_log_connection_policy =ERRORS ;
可以使用另一个策略系统变量, udit_log_policy
但不能提供与 udit_log_connection_policy
和一样多的控制 udit_log_statement_policy
。只能在服务器启动时设置。在运行时,它是一个只读变量。它的值为ALL
(记录所有事件;这是默认值),LOGINS
(记录连接事件),QUERIES
(记录语句事件)或NONE
(不记录事件)。对于这些值中的任何一个,审核日志插件都会记录所有选定的事件,而不会区分成功还是失败。 udit_log_policy
在启动时的使用方式如下:
- 如果未将
udit_log_policy
其ALL
设置为默认值或未将其设置为默认值,则任何显式设置udit_log_connection_policy
或udit_log_statement_policy
按指定应用。如果未指定,则默认为ALL
。 如果设置
udit_log_policy
为非ALL
值,则该值优先于并用于设置udit_log_connection_policy
和udit_log_statement_policy
,如下表所示。如果您还将这些变量中的任何一个都设置为默认值以外的其他值ALL
,则服务器会向错误日志中写入一条消息,指示它们的值已被覆盖。启动audit_log_policy值 产生的audit_log_connection_policy值 结果audit_log_statement_policy值 LOGINS
ALL
NONE
QUERIES
NONE
ALL
NONE
NONE
NONE