8.4.5.10 Legacy 模式审计日志过滤
本节描述了 legacy 审计日志过滤,适用于安装了 audit_log
插件但没有相应的 audit 表和函数的规则过滤。
Legacy 模式 Audit Log 过滤已弃用。
Audit 日志插件可以过滤审计事件。这使您能够控制是否将审计事件写入 audit 日志文件,基于事件的来源账户或事件状态。状态过滤分别对连接事件和语句事件进行。
根据事件的来源账户过滤审计事件,服务器启动或运行时设置一个(不两个)以下系统变量。这些已弃用的变量仅适用于 legacy 审计日志过滤。
-
audit_log_include_accounts
:要包括在 audit 记录中的账户。如果设置了该变量,只有这些账户被记录。 -
audit_log_exclude_accounts
:要排除在 audit 记录中的账户。如果设置了该变量,所有账户都被记录。
这两个变量的值可以是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 模式下不起作用,因为在该模式下双引号表示标识符引号,而不是字符串引号。
为了根据状态过滤审核事件,在服务器启动或运行时设置以下系统变量。这些已弃用的变量仅适用于遗留审核日志 filtering。对于 JSON 审核日志 filtering,需要查看Audit Log Options and Variables。
-
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
之外的值,服务器将写入错误日志以指示它们的值被覆盖。Startup audit_log_policy Value Resulting audit_log_connection_policy Value Resulting audit_log_statement_policy Value LOGINS
ALL
NONE
QUERIES
NONE
ALL
NONE
NONE
NONE