#### 6.4.5.10 传统模式审核日志过滤

[](<>)

笔记

本节介绍旧版审计日志过滤，如果`审计日志`安装插件时没有附带基于规则过滤所需的审计表和函数。

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

-   [按帐户过滤旧事件](audit-log-legacy-filtering.html#audit-log-account-filtering)

-   [按状态过滤旧事件](audit-log-legacy-filtering.html#audit-log-status-filtering)

##### 按帐户过滤旧事件

要根据原始帐户过滤审核事件，请在服务器启动或运行时设置以下系统变量之一（而不是两者）。这些变量仅适用于旧版审核日志过滤。

-   [`audit_log_include_accounts`](audit-log-reference.html#sysvar_audit_log_include_accounts)：要包含在审计日志中的帐户。如果设置了此变量，则仅审计这些帐户。

-   [`audit_log_exclude_accounts`](audit-log-reference.html#sysvar_audit_log_exclude_accounts)：要从审计日志中排除的帐户。如果设置了此变量，则审计除这些帐户之外的所有帐户。

    任一变量的值可以是`空值`或包含一个或多个以逗号分隔的帐户名的字符串，每个帐户名在`*`用户名`*@*`主机名`*`格式。默认情况下，这两个变量都是`空值`，在这种情况下，不进行帐户过滤，并且对所有帐户进行审核。

    修改为[`audit_log_include_accounts`](audit-log-reference.html#sysvar_audit_log_include_accounts)要么[`audit_log_exclude_accounts`](audit-log-reference.html#sysvar_audit_log_exclude_accounts)仅影响修改后创建的连接，而不影响现有连接。

    示例：仅对`用户1`和`用户2`本地主机帐户，设置[`audit_log_include_accounts`](audit-log-reference.html#sysvar_audit_log_include_accounts)像这样的系统变量：


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

只有其中之一[`audit_log_include_accounts`](audit-log-reference.html#sysvar_audit_log_include_accounts)要么[`audit_log_exclude_accounts`](audit-log-reference.html#sysvar_audit_log_exclude_accounts)可以是非`空值`一次：

-   如果你设置[`audit_log_include_accounts`](audit-log-reference.html#sysvar_audit_log_include_accounts), 服务器集[`audit_log_exclude_accounts`](audit-log-reference.html#sysvar_audit_log_exclude_accounts)到`空值`.

-   如果您尝试设置[`audit_log_exclude_accounts`](audit-log-reference.html#sysvar_audit_log_exclude_accounts), 除非发生错误[`audit_log_include_accounts`](audit-log-reference.html#sysvar_audit_log_include_accounts)是`空值`.在这种情况下，您必须先清除[`audit_log_include_accounts`](audit-log-reference.html#sysvar_audit_log_include_accounts)通过将其设置为`空值`.


```
-- 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.html)显示`空值`作为一个空字符串。显示`空值`作为`空值`， 采用[`选择`](select.html)反而：

```
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                         |
+------------------------------+
```

如果用户名或主机名因为包含逗号、空格或其他特殊字符而需要引用，请使用单引号将其引用。如果变量值本身用单引号引起来，则将每个内部单引号加倍或用反斜杠对其进行转义。以下语句分别为本地启用审计日志记录`根`account 和 是等价的，即使引用样式不同：

```
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-reference.html#audit-log-options-variables).

-   [`审核日志连接策略`](audit-log-reference.html#sysvar_audit_log_connection_policy)：连接事件的日志记录策略

-   [`审计日志声明政策`](audit-log-reference.html#sysvar_audit_log_statement_policy)：语句事件的日志记录策略

    每个变量的值为`全部的`（记录所有相关事件；这是默认设置），`错误`（只记录失败的事件），或`没有一个`（不要记录事件）。例如，要记录所有语句事件，但仅记录连接失败事件，请使用以下设置：


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

另一个政策系统变量，[`审核日志策略`](audit-log-reference.html#sysvar_audit_log_policy)，但控制力不如[`审核日志连接策略`](audit-log-reference.html#sysvar_audit_log_connection_policy)和[`审计日志声明政策`](audit-log-reference.html#sysvar_audit_log_statement_policy)。只能在服务器启动时设置。在运行时，它是一个只读变量。它的值为`全部的`（记录所有事件；这是默认设置），`登录`（记录连接事件），`询问`（记录语句事件），或`没有一个`（不要记录事件）。对于这些值中的任何一个，审核日志插件都会记录所有选定的事件，而不区分成功与失败。使用[`审核日志策略`](audit-log-reference.html#sysvar_audit_log_policy)启动时的工作如下：

-   如果你不设定[`审核日志策略`](audit-log-reference.html#sysvar_audit_log_policy)或者将其设置为默认值`全部的`，是否有任何明确的设置[`审核日志连接策略`](audit-log-reference.html#sysvar_audit_log_connection_policy)或[`审计日志声明政策`](audit-log-reference.html#sysvar_audit_log_statement_policy)按规定申请。如果未指定，则默认为`全部的`.

-   如果你设定[`审核日志策略`](audit-log-reference.html#sysvar_audit_log_policy)对一个非-`全部的`值，该值优先于并用于设置[`审核日志连接策略`](audit-log-reference.html#sysvar_audit_log_connection_policy)和[`审计日志声明政策`](audit-log-reference.html#sysvar_audit_log_statement_policy)，如下表所示。如果您还将这些变量中的任何一个设置为默认值以外的值`全部的`，服务器会将一条消息写入错误日志，以指示它们的值正在被覆盖。

    | 启动审计\_日志\_政策价值 | 结果审计\_日志\_联系\_政策价值 | 结果审计\_日志\_陈述\_政策价值 |
    | -------------- | ------------------ | ------------------ |
    | `登录` | `全部的` | `没有一个` |
    | `询问` | `没有一个` | `全部的` |
    | `没有一个` | `没有一个` | `没有一个` |
