本节介绍旧模式审计日志过滤,如果在安装 audit_log
插件时没有附带基于规则过滤所需的审计表和函数,则适用此模式。
旧模式审计日志过滤已弃用。
审计日志插件可以过滤审计事件。这使您能够根据事件源自的帐户或事件状态来控制是否将审计事件写入审计日志文件。状态过滤分别针对连接事件和语句事件进行。
要根据源帐户过滤审计事件,请在服务器启动或运行时设置以下系统变量之一(而不是两者)。这些已弃用的变量仅适用于旧模式审计日志过滤。
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