Documentation Home
MySQL 8.0 参考手册  / 第 6 章 安全  / 6.4 安全组件和插件  / 6.4.5 MySQL企业审计  /  6.4.5.10 传统模式审计日志过滤

6.4.5.10 传统模式审计日志过滤

笔记

本节介绍遗留审计日志过滤,适用于以下任一情况:

  • 在 MySQL 5.7.13 之前,即在引入 第 6.4.5.7 节“审计日志过滤”中描述的基于规则的审计日志过滤之前。

  • 从 MySQL 5.7.13 开始,如果audit_log 安装插件时没有附带基于规则的过滤所需的审计表和函数。

审计日志插件可以过滤审计的事件。这使您能够根据事件产生的帐户或事件状态来控制是否将已审计的事件写入审计日志文件。状态过滤分别针对连接事件和语句事件进行。

按帐户过滤旧版事件

要根据原始帐户过滤已审计的事件,请在服务器启动或运行时设置以下系统变量之一(不是两个)。这些变量仅适用于遗留审计日志过滤。

  • audit_log_include_accounts:要包含在审计日志中的帐户。如果设置了此变量,则仅审计这些帐户。

  • audit_log_exclude_accounts:要从审计日志中排除的帐户。如果设置了这个变量,除了这些账户之外的所有账户都会被审计。

任一变量的值可以是NULL 或一个字符串,其中包含一个或多个以逗号分隔的帐户名称,每个名称均采用 格式。默认情况下,这两个变量都是 ,在这种情况下,不会进行任何帐户过滤,而是对所有帐户进行审计。 user_name@host_nameNULL

对修改后创建的连接的修改 audit_log_include_accountsaudit_log_exclude_accounts 仅影响修改后创建的连接,而不影响现有连接。

示例:要仅为 本地主机帐户启用审核日志记录,请像这样设置 user1系统 变量: user2audit_log_include_accounts

SET GLOBAL audit_log_include_accounts = 'user1@localhost,user2@localhost';

一次只有一个 audit_log_include_accountsaudit_log_exclude_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为空字符串。要显示 NULLNULL,请 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 审计日志过滤,应用不同的状态变量;请参阅 审核日志选项和变量

每个变量取一个值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。它只能在服务器启动时设置。在运行时,它是一个只读变量。它的值是ALL (记录所有事件;这是默认值)、 LOGINS(记录连接事件)、 QUERIES(记录语句事件)或 NONE(不记录事件)。对于这些值中的任何一个,审计日志插件都会记录所有选定的事件,而不区分成功或失败。at startup 的使用 audit_log_policy如下:

  • 如果您未设置 audit_log_policy或将其设置为其默认值ALL,则任何显式设置 audit_log_connection_policyaudit_log_statement_policy 应用均按指定方式应用。如果未指定,它们默认为 ALL.

  • 如果设置 audit_log_policy为非ALL值,则该值优先于并用于设置 audit_log_connection_policyaudit_log_statement_policy,如下表所示。如果您还将这些变量中的任何一个设置为默认值 以外的值ALL,服务器会向错误日志写入一条消息,指示它们的值已被覆盖。

    启动 audit_log_policy 值 结果 audit_log_connection_policy 值 结果 audit_log_statement_policy 值
    LOGINS ALL NONE
    QUERIES NONE ALL
    NONE NONE NONE