首批通过分布式安全可靠测评,为关键业务系统打造
开启安全审计
更新时间:2026-07-16 20:01:47
通过一系列过滤器实现对特定事件进行安全审计。
功能适用性
该内容仅适用于 OceanBase 数据库企业版,OceanBase 数据库社区版暂不支持审计功能。
审计范围
过滤器可以过滤的维度包括:账号、事件类型、事件属性等。每个过滤器可以选择对过滤出来的事件是否进行审计。
使用限制及注意事项
- 表达式必须直接且唯一地放置在一个
SELECT语句的输出列(即 select item)中,且没有父表达式(parent expr)限制。 - 表达式不能写在子查询中。
- 过滤器定义好之后,还需要设置到用户上才能够最终生效。
- 过滤器和用户是一对多的关系,即一个过滤器可以设置到多个用户上,一个用户上只能设置一个过滤器。
- 建立连接时会确定当前 Session 使用哪个审计过滤器(Audit Filter),在整个 Session 生命周期内不变。
审计日志加密
说明
审计日志加密功能从 V4.4.2 BP1 版本开始支持。
MySQL 租户审计日志支持以明文或加密方式落盘及对外输出。具体配置方式参见文末相关文档。
创建过滤器
通过创建过滤器开启 MySQL 租户的审计模式。过滤器在事件类型(Class)上控制是否记录,在此基础上,还支持事件类型细分(Event Type)、事件字段(Event Field)过滤,以及对事件字段条件使用 AND / OR 的逻辑组合。
说明
事件类型细分,字段过滤和逻辑组合运算能力从 V4.4.2 BP1 版本开始支持,V4.4.2 版本仅支持事件类型过滤。
语法
通过 AUDIT_LOG_FILTER_SET_FILTER 函数创建过滤器,命令如下:
AUDIT_LOG_FILTER_SET_FILTER('filter_name', 'definition_of_filters');
参数说明如下:
| 字段 | 说明 |
|---|---|
| filter_name | 用于指定过滤器名称。
说明
|
| definition_of_filters | 用于定义审计过滤器的具体配置,采用 JSON 字符串格式进行表述。在 事件类型之上,可配置事件类型细分、事件字段及字段条件间的 AND / OR 组合。 |
具体配置项说明如下:
- 事件类型细分(Event Type):用于对指定事件类型进行进一步细分和过滤。在 JSON 字符串中,通过
class下的event下的name参数指定相关字段,如{"class": [{"name": "connection", "event": [{"name": "disconnect"}]}]}。 - 事件字段(Event Field)过滤:事件字段用于对指定事件类型进行进一步细分和过滤。可通过设置
field参数,实现对 connection、general 和 table_access 三类事件的具体字段(field)进行筛选。在 JSON 字符串中,通过event下的log参数指定相关字段,如"event": [{"name": "read", "log": {"field": {"name": "table_name", "value": "t1"}}}]。 - 逻辑组合:支持通过
AND/OR对多个 field 进行逻辑组合。
事件类型细分支持的子类型:
| 事件类型(Class) | 说明 | 可细分的子类型(Event Type) |
|---|---|---|
| connection | 包含登录登出语句 |
|
| general | 包含全部非 DML 语句 |
|
| table_access | 仅可用于 DML |
|
事件字段过滤支持的字段:
包含 connection、general、table_access 三个事件类型,每个事件类型下支持多个事件字段,详见下表:
| 事件类型 | 事件字段(Event Field) | 数据类型 | 说明 |
|---|---|---|---|
| connection | connection_id | Int | 连接唯一标识 |
| connection | user | String | 需要审计的登录用户名 |
| connection | database | String | 连接时指定的数据库名 |
| connection | ip | String | 连接指定的用户使用的客户端 IP 地址 |
| connection | server_ip | String | 连接的 OBServer 的服务端 IP 地址 |
| connection | server_host | String | 连接的 OBServer 的服务端主机名 |
| general | general_user | String | 审计指定的用户名 |
| general | general_sql_command | String | 审计指定的 SQL 命令类型。当前可覆盖所有非 DML 语句类型,具体语句参见表格下方说明。 |
| table_access | table_database | String | 事件所属的数据库名称 |
| table_access | table_name | String | 事件相关的表。支持两种用法:
|
说明
查看 general_sql_command 支持的完整 SQL 类型,请参考文末相关文档。
log 字段的层级、差异与默认行为
日志记录行为取决于 log 的取值,以及是否指定了 class 或 event 项。
| 层级 | 取值 | 说明 | 未指定时行为 |
|---|---|---|---|
filter.log |
true/false | 过滤器总开关,控制默认记录/不记录。 | 若未指定 class 或 event,默认按 true 处理。 |
filter.class[].log |
true/false/JSON 字符串 | 针对单个 class 条目进行局部开关或条件过滤。 |
可显式配置;未配置时按上层规则处理。 |
filter.class[].event[].log |
true/false/JSON 字符串 | 针对单个 event 条目进行局部开关或条件过滤。 |
可显式配置;未配置时按上层规则处理。 |
其他说明:
- 表格中层级一列是路径表示法的简写,其中:
filter.log表示filter对象下的log属性,例如{"filter": {"log": true}}。filter.class[].log表示filter对象下的class数组中的单个元素的log属性,例如{"filter": {"class": [{"log": true}]}}。filter.class[].event[].log表示filter对象下的class数组中的单个元素的event数组中的单个元素的log属性,例如{"filter":{"class":[{"name":"table_access","event":[{"name":"read","log":true}]}]}}。
- 文档中 “JSON 外层
log” 与 “class/event层log” 不是重复配置:前者是总开关,后者是局部覆盖或条件过滤。
definition_of_filters 简例
以下为过滤器 definition_of_filters 字段 JSON 极简示例,更多示例请参见文末相关文档中 AUDIT_LOG_FILTER_SET_FILTER 函数的参考文档:
记录所有事件:
log为true即可(等价于记录全部 Class)。{ "filter": { "log": true } }记录事件类型细分为
connect的事件(在connection类型下只保留建立连接,不包含disconnect):{ "filter": { "log": true, "class": [ { "name": "connection", "event": [ { "name": "connect" } ] } ] } }
示例
本节给出一个完整示例。
创建记录所有事件的过滤器
log_all。obclient [test]>SELECT AUDIT_LOG_FILTER_SET_FILTER('log_all', '{ "filter": { "log": true } }');当 DDL 执行成功时,表达式返回
OK。+-------------------------------------------------------------------------+ | AUDIT_LOG_FILTER_SET_FILTER('log_all', '{ "filter": { "log": true } }') | +-------------------------------------------------------------------------+ | OK | +-------------------------------------------------------------------------+ 1 row in set当 DDL 失败时,
SELECT语句仍然执行成功,表达式的输出结果为错误信息。obclient [test]>SELECT AUDIT_LOG_FILTER_SET_FILTER('log_err', '1');返回结果如下:
+---------------------------------------------+ | AUDIT_LOG_FILTER_SET_FILTER('log_err', '1') | +---------------------------------------------+ | ERROR: JSON parsing error. | +---------------------------------------------+ 1 row in set
通过
mysql.audit_log_filter视图查看审计过滤器的定义。视图完整语法和示例请参见文末相关文档。obclient [test]> select * from mysql.audit_log_filter;返回结果如下:
+---------+-------------------------------+ | NAME | FILTER | +---------+-------------------------------+ | log_all | { "filter": { "log": true } } | +---------+-------------------------------+ 1 row in set (0.003 sec)各字段解释如下:
字段名称 描述 NAME 过滤器名称 FILTER 过滤器定义
配置过滤器
通过配置过滤器给对应的用户后,后台线程才能打印审计日志。
语法
通过 AUDIT_LOG_FILTER_SET_USER 函数将过滤器设置到用户上。
AUDIT_LOG_FILTER_SET_USER('user_name', 'filter_name');
各字段解释如下:
| 字段 | 说明 |
|---|---|
| user_name | 用于指定用户名称。
说明
|
| filter_name | 用于指定过滤器名称。
说明
|
示例
将过滤器
log_all设置到用户user001上。obclient [test]> SELECT AUDIT_LOG_FILTER_SET_USER('user001', 'log_all');当 DDL 执行成功时,表达式返回
OK。+-------------------------------------------------+ | AUDIT_LOG_FILTER_SET_USER('user001', 'log_all') | +-------------------------------------------------+ | OK | +-------------------------------------------------+ 1 row in set当 DDL 执行失败时,
SELECT语句仍然执行成功,表达式的输出结果为错误信息。obclient [test]>SELECT AUDIT_LOG_FILTER_SET_USER('log_err', '1');返回结果如下:
+--------------------------------------------+ | 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视图查看审计过滤器和用户的映射关系。视图完整语法和示例请参见文末相关文档。obclient [test]> select * from mysql.audit_log_user;返回结果如下:
+---------+------+------------+ | USER | HOST | FILTERNAME | +---------+------+------------+ | user001 | % | log_all | +---------+------+------------+ 1 row in set (0.003 sec)各字段解释如下:
字段名称 描述 USER 用户名 HOST 主机名 FILTERNAME 过滤器名称
开启审计
通过配置项 audit_log_enable 开启 MySQL 租户下的审计功能。配置项完整说明请参见文末相关文档。
obclient> ALTER SYSTEM SET audit_log_enable=TRUE;
相关文档
- 设置审计日志策略,包含写入、压缩、轮转、清理、加密等:设置审计规则
- 过滤器创建函数:AUDIT_LOG_FILTER_SET_FILTER
- 过滤器配置函数:AUDIT_LOG_FILTER_SET_USER
- 过滤器查看视图:mysql.audit_log_filter
- 过滤器用户映射视图:mysql.audit_log_user
- 开启审计配置项:audit_log_enable
- 附录:general_sql_command 支持的完整 SQL 类型