---
title: "开启安全审计 - OceanBase Database AI V4.6.2 | OceanBase 文档中心"
description: 开启安全审计 通过一系列过滤器实现对特定事件进行安全审计。 审计范围 过滤器可以过滤的维度包括：账号、事件类型、事件属性等。每个过滤器可以选择对过滤出来的事件是否进行审计。 使用限制及注意事项 表达式必须直接且唯一地放置在一个 SELECT 语句的输出列（即 select item）中，且没有父表达式（parent …
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*inJjSpyNOjUAAAAAHtAAAAgAeiGDAQ/original) OceanBase Database AIV 4.6.2

# 开启安全审计

更新时间：2026-08-13 19:27:47

[编辑](https://github.com/oceanbase/oceanbase-database-ai/edit/V4.6.2/zh-CN/600.manage/500.security-and-permissions/600.security-audit/200.security-audit-of-mysql-mode/200.audit-open-of-mysql-mode.md)  

通过一系列过滤器实现对特定事件进行安全审计。

## 审计范围

过滤器可以过滤的维度包括：账号、事件类型、事件属性等。每个过滤器可以选择对过滤出来的事件是否进行审计。

## 使用限制及注意事项

- 表达式必须直接且唯一地放置在一个 `SELECT` 语句的输出列（即 select item）中，且没有父表达式（parent expr）限制。
 - 表达式不能写在子查询中。
 - 过滤器定义好之后，还需要设置到用户上才能够最终生效。
 - 过滤器和用户是一对多的关系，即一个过滤器可以设置到多个用户上，一个用户上只能设置一个过滤器。
 - 建立连接时会确定当前 Session 使用哪个审计过滤器（Audit Filter），在整个 Session 生命周期内不变。

## 创建过滤器

通过创建过滤器开启审计模式，过滤器支持对审计事件类型进行选择性过滤，目前支持记录所有事件、不记录所有事件和只记录登录登出三种类型的的选择。

### 语法

通过 [AUDIT_LOG_FILTER_SET_FILTER](https://www.oceanbase.com/docs/common-oceanbase-database-ai-1000000006781835) 函数（表达式）创建过滤器，命令如下：

```sql
AUDIT_LOG_FILTER_SET_FILTER('filter_name', 'definition_of_filters');

```

**各字段解释如下：**

| 字段 | 说明 |
| --- | --- |
| filter_name | 用于指定过滤器名称。   #### 说明    `AUDIT_LOG_FILTER_SET_FILTER` 是 `CREATE OR REPLACE` 语义，对已存在的对象执行 DDL 会覆盖。 |
| definition_of_filters | 用于定义审计过滤器的具体配置，采用 JSON 格式进行表述。当前版本的过滤器设计原则与 MySQL 兼容，但只支持对审计事件类型进行过滤。 |

目前支持创建过滤器配置的类型如下：

- 记录所有事件。

  ```sql
  {
  "filter": {
      "log": true
  }
  }

  ```

  或

  ```sql
  {
  "filter": {
      "log": true,
      "class": [
      { "name": "connection" },
      { "name": "general" },
      { "name": "table_access" }
      ]
  }
  }

  ```
 - 不记录所有事件。

  ```sql
  {
  "filter": {
      "log": false
  }
  }

  ```
 - 只记录登录登出。

  ```sql
   {
  "filter": {
      "log": true,
      "class": [
      { "name": "connection" }
      ]
  }
  }

  ```

**审计事件分类如下：**

| 事件类型 | 说明 |
| --- | --- |
| connection | 登录退出。 |
| table_access | DML 语句。 |
| general | cmd 语句，parser 失败。 |

### 示例

创建记录所有事件的过滤器 `log_all`。

```shell
obclient [test]>SELECT AUDIT_LOG_FILTER_SET_FILTER('log_all', '{ "filter": { "log": true } }');

```

- 当 DDL 执行成功时，表达式返回 `OK`。

  ```shell
  +-------------------------------------------------------------------------+
  | AUDIT_LOG_FILTER_SET_FILTER('log_all', '{ "filter": { "log": true } }') |
  +-------------------------------------------------------------------------+
  | OK                                                                      |
  +-------------------------------------------------------------------------+
  1 row in set

  ```
 - 当 DDL 失败时，`SELECT` 语句仍然执行成功，表达式的输出结果为错误信息。

  ```shell
  obclient [test]>SELECT AUDIT_LOG_FILTER_SET_FILTER('log_err', '1');

  ```

  返回结果如下：

  ```shell
  +---------------------------------------------+
  | AUDIT_LOG_FILTER_SET_FILTER('log_err', '1') |
  +---------------------------------------------+
  | ERROR: JSON parsing error.                  |
  +---------------------------------------------+
  1 row in set

  ```

通过 [mysql.audit_log_filter](https://www.oceanbase.com/docs/common-oceanbase-database-ai-1000000006780677) 视图查看审计过滤器的定义。

```shell
obclient [test]> select * from mysql.audit_log_filter;

```

返回结果如下：

```shell
+---------+-------------------------------+
| NAME    | FILTER                        |
+---------+-------------------------------+
| log_all | { "filter": { "log": true } } |
+---------+-------------------------------+
1 row in set (0.003 sec)

```

| **字段名称** | **描述** |
| --- | --- |
| NAME | 过滤器名称 |
| FILTER | 过滤器定义 |

## 配置过滤器

通过配置过滤器给对应的用户后，后台线程才能打印审计日志。

### 语法

通过 [AUDIT_LOG_FILTER_SET_USER](https://www.oceanbase.com/docs/common-oceanbase-database-ai-1000000006781834) 函数（表达式）将过滤器设置到用户上。

```sql
AUDIT_LOG_FILTER_SET_USER('user_name', 'filter_name');

```

| 字段 | 说明 |
| --- | --- |
| user_name | 用于指定用户名称。   #### 说明    `AUDIT_LOG_FILTER_SET_USER` 指定的 `user@host` 不要求是已存在的用户，可以写通配符或不存在的用户。当指定不存在的用户时，可以在登录审计的时候起作用。`user_name` 有以下限制：    - `user` 只支持对整个字段进行通配，即 `%`。 - 不支持指定 `host` 字段或 `test_%` 这种部分通配符的写法。若指定 `host` 或 `test_%`，则无法创建过滤器。 |
| filter_name | 用于指定过滤器名称。   #### 说明    `AUDIT_LOG_FILTER_SET_USER` 是 `CREATE OR REPLACE` 语义，对已存在的对象执行 DDL 会覆盖。指定的 `filter_name` 不存在时，DDL 不生效但也不报错。 |

### 示例

将过滤器 `log_all` 设置到用户上 `user001`。

```shell
obclient [test]> SELECT AUDIT_LOG_FILTER_SET_USER('user001', 'log_all');

```

  ```shell
  +-------------------------------------------------+
  | AUDIT_LOG_FILTER_SET_USER('user001', 'log_all') |
  +-------------------------------------------------+
  | OK                                              |
  +-------------------------------------------------+
  1 row in set

  ```
 - 当 DDL 执行失败时，`SELECT` 语句仍然执行成功，表达式的输出结果为错误信息。

  ```shell
  obclient [test]>SELECT AUDIT_LOG_FILTER_SET_USER('log_err', '1');

  ```

  返回结果如下：

  ```shell
  +--------------------------------------------+
  | AUDIT_LOG_FILTER_SET_USER('log_err', '1')  |
  +--------------------------------------------+
  | ERROR: Invalid character in the user name. |
  +--------------------------------------------+
  1 row in set (0.001 sec)

  ```

通过 [mysql.audit_log_user](https://www.oceanbase.com/docs/common-oceanbase-database-ai-1000000006780506) 视图查看审计过滤器和用户的映射关系。。

```shell
obclient [test]> select * from mysql.audit_log_user;

```

返回结果如下：

```shell
+---------+------+------------+
| USER    | HOST | FILTERNAME |
+---------+------+------------+
| user001 | %    | log_all    |
+---------+------+------------+
1 row in set (0.003 sec)

```

| **字段名称** | **描述** |
| --- | --- |
| USER | 用户名 |
| HOST | 主机名 |
| FILTERNAME | 过滤器名称 |

## 开启审计

通过配置项 [audit_log_enable](https://www.oceanbase.com/docs/common-oceanbase-database-ai-1000000006781060) 开启用户租户下的审计功能。

```shell
obclient> ALTER SYSTEM SET audit_log_enable=TRUE;

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
