文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  传统模式审计日志过滤

8.4.5.10 传统模式审计日志过滤

注意

本节介绍传统审计日志过滤,如果安装 audit_log 插件时没有安装与之配套的审计表和函数,这些函数是基于规则的过滤所需的,则会应用该过滤。

传统模式审计日志过滤已弃用。

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

传统模式按帐户过滤事件

若要根据来源帐户过滤受审计的事件,请在服务器启动或运行时设置以下系统变量之一(不要同时设置两个)。这些已弃用的变量仅适用于传统模式审计日志过滤。

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

  • audit_log_exclude_accounts:要从审计日志记录中排除的帐户。如果设置了此变量,则会审计除这些帐户之外的所有帐户。

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

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

示例:若要仅针对本地主机帐户 user1user2 启用审计日志记录,请像这样设置 audit_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 显示为空字符串。若要将 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 审核日志过滤,将应用不同的状态变量;请参阅 审核日志选项和变量

每个变量都取值为 ALL(记录所有关联事件;这是默认值)、ERRORS(仅记录失败事件)或 NONE(不记录事件)。例如,要记录所有语句事件,但只记录失败的连接事件,请使用以下设置

SET GLOBAL audit_log_statement_policy = ALL;
SET GLOBAL audit_log_connection_policy = ERRORS;

另一个策略系统变量,audit_log_policy 可用,但不像 audit_log_connection_policyaudit_log_statement_policy 那样提供那么多的控制。它只能在服务器启动时设置。

注意

遗留模式系统变量 audit_log_policy 已弃用。

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