首批通过分布式安全可靠测评,为关键业务系统打造
设置审计规则
更新时间:2026-07-16 20:01:47
开启安全审计后,需要设置具体的安全审计规则来对用户的操作进行审计。
功能适用性
该内容仅适用于 OceanBase 数据库企业版,OceanBase 数据库社区版暂不支持审计功能。
设置日志策略
通过配置项 audit_log_strategy 设置审计日志的策略,支持 ASYNCHRONOUS、PERFORMANCE、SYNCHRONOUS 三种类型的写日志策略,可以根据需要选择对应的写策略,以实现在性能和日志完整性之间的平衡。配置项完整说明请参见文末相关文档。
ASYNCHRONOUS:表示异步写日志,buffer 满时会同步等待,该策略为默认策略。
PERFORMANCE:表示异步写日志,buffer 满时丢弃数据。
SYNCHRONOUS:表示同步写日志。
例如,设置审计记录写文件策略为异步写日志,buffer 满时会同步等待。
obclient [test]> ALTER SYSTEM SET audit_log_strategy='ASYNCHRONOUS';
当使用异步写日志时,可以通过配置项 audit_log_buffer_size 控制 buffer 大小。配置项完整说明请参见文末相关文档。
设置日志格式
通过设置配置项 audit_log_format 选择审计日志的格式,目前只支持 CSV 格式。配置项完整说明请参见文末相关文档。
obclient [test]> ALTER SYSTEM SET audit_log_format='CSV';
设置数据脱敏
通过配置项 audit_log_query_sql 选择审计记录中的 SQL 语句,取值包含 ALL 和 NONE 两种。配置项完整说明请参见文末相关文档。
ALL:记录所有 Query SQL。
NONE:不记录 Query SQL。
例如设置审计记录中的 SQL 语句不记录 Query SQL。
obclient [test]> ALTER SYSTEM SET audit_log_query_sql='NONE';
记录 Query SQL 时审计文件对以下语句进行了数据脱敏:
- CMD:对于包含密码、AK/SK 等敏感信息的语句,如创建用户、发起备份恢复、修改配置项,统一记录为
***。对于其他类型 CMD 语句,直接记录原始 SQL。 - 无法判断语句类型:如 Parser 失败,也记录为
***。
设置输出路径
通过配置项 audit_log_path 设置审计日志的输出路径,支持本地存储和云存储。如果未指定 audit_log_path 的取值,则默认使用当前工作路径 ${WORK_DIR}/audit。配置项完整说明请参见文末相关文档。
说明
先开启审计再修改输出路径的情况,修改 audit_log_path 后不会立即切换到新目录,需等待当前 audit.log 写满并触发轮转(由 audit_log_rotate_on_size 控制,参见下文设置日志归档)后,新生成的日志才会写入新路径。
本地存储场景
同一个租户中,不同 OBServer 的审计日志会输出到不同目录。同一个集群中,用户可能会将不同租户的输出路径设置为同一个,此时目录结构中会增加一层
tenant_id。本地输出目录结构如下图:- ${audit_log_path} - tenant_id_1 - ip1:port1 - audit.log.20231031080646317[.zst] - audit.log.20231031084835263[.zst] - audit.log - ip2:port2 - audit.log.20231031072457838[.zst] - audit.log.20231031093023607[.zst] - audit.log.20231031101213751[.zst] - audit.log - tenant_id_2配置审计日志的输出目录为本地的示例如下。
obclient [test]> ALTER SYSTEM SET audit_log_path='file:///logs/audit';云存储场景
OceanBase 数据库支持多个 OBServer 输出到同一个
oss/nfs目录的场景。考虑到并发追加写文件的性能以及后续的压缩和加密功能都需要操作本地文件,只有归档后的文件会存到云存储,追加写会写到本地audit目录下的文件中。下游消费云存储中的审计日志时,部分最新的记录只存在 OBServer 本地,对下游不可见。配置审计日志的输出目录为
OSS的示例如下。obclient [test]> ALTER SYSTEM SET audit_log_path = 'oss://ob-audit/audit/?host=$OSS_HOST&access_id=$OSS_ACCESS_ID&access_key=$OSS_ACCESS_KEY';其中
$OSS_HOST、$OSS_ACCESS_ID、$OSS_ACCESS_KEY需要替换为实际的 HOST 地址、访问密钥 ID、访问密钥,访问密钥会加密存储。
设置日志归档
审计记录会不断地追加写到 audit.log 文件中,通过设置配置项 audit_log_rotate_on_size 实现自动归档日志,当 audit.log 的大小达到指定值时,会自动生成一个新的文件。归档只负责控制单个日志文件的大小,不负责清理文件。配置项完整说明请参见文末相关文档。
例如,设置审计记录单个文件的大小为 256M。
obclient [test]> ALTER SYSTEM SET audit_log_rotate_on_size='256M';
设置日志清理
通过配置项 audit_log_max_size 和 audit_log_prune_seconds 控制归档后审计日志的容量以及保存时间,两者可以同时生效。每次归档日志生成新的日志文件时会检查是否需要清理日志,日志总量在每个 OBServer 目录中单独计算。
设置配置项 audit_log_max_size 来控制单个 OBServer 上审计日志的最大保存量,默认为 0M,表示不保存审计日志。
例如,设置单个 OBServer 上审计日志的最大保存量为 1G。
obclient [test]> ALTER SYSTEM SET audit_log_max_size='1G';
设置配置项 audit_log_prune_seconds 来控制审计日志的最大保存时间,单位为秒且配置时不需要写明单位,默认为 0 表示不保存审计日志。
例如,设置审计日志的最大保存时间 2h。
obclient [test]> ALTER SYSTEM SET audit_log_prune_seconds=7200;
配置项完整说明请参见文末相关文档。
设置日志压缩(可选)
通过设置配置项 audit_log_compression 控制日志压缩的启用。如果开启了压缩,日志归档时会直接生成压缩后的文件,压缩算法仅支持 ZSTD,也支持流式压缩,且压缩后的文件使用外部工具 zstd 直接解压。配置项完整说明请参见文末相关文档。
说明
仅压缩归档后的文件,audit.log 文件是不压缩的。
例如,设置审计日志使用的压缩算法为 ZSTD。
obclient [test]> ALTER SYSTEM SET audit_log_compression='ZSTD';
设置日志加密(可选)
说明
该功能从 V4.4.2 BP1 版本开始引入。
MySQL 租户支持对审计日志进行加密存储。在启用加密后,归档产生的日志文件可按密钥标识落盘,便于与压缩、轮转、清理等策略组合使用。可参考下文小节步骤按需顺次操作。
启用日志加密功能
通过配置项 audit_log_encryption 控制是否启用审计日志加密,取值包括:
NONE:不启用加密,为默认取值。AES:启用加密;算法为 AES-256-CBC 的流式加密(归档写入过程中对流加密)。
例如,为当前租户启用审计日志加密:
obclient [test]> ALTER SYSTEM SET audit_log_encryption='AES';
配置项完整说明请参见文末相关文档。
日志归档与密码生成
通过调用以下函数实现日志归档与密码生成:
AUDIT_LOG_ENCRYPTION_PASSWORD_SET():无参数。用于触发归档当前正在写入的审计日志,并生成新的加密密钥;后续新生成的归档文件将使用新密钥加密。函数完整说明请参见文末相关文档。
注意
使用该函数需拥有 SUPER 权限。
示例如下:
obclient [test]> SELECT AUDIT_LOG_ENCRYPTION_PASSWORD_SET();
注意
仅在 audit_log_encryption 配置项开启且此步骤执行成功后,归档生成的审计日志文件才会被加密存储。
日志密码获取
通过调用以下函数获取日志文件的加密密码:
AUDIT_LOG_ENCRYPTION_PASSWORD_GET(pwd_id):参数pwd_id为 Int 类型,表示日志文件的时间戳后缀。用于根据日志文件的时间戳后缀返回对应归档日志文件的加密密码,如果不传入参数,默认获取最新的pwd_id对应的密码。函数完整说明请参见文末相关文档。
说明
使用该函数需拥有 SUPER 权限。
获取当前最新归档日志的加密密码:
obclient [test]> SELECT AUDIT_LOG_ENCRYPTION_PASSWORD_GET();
获取指定日志的加密密码:
obclient [test]> SELECT AUDIT_LOG_ENCRYPTION_PASSWORD_GET('1682089200');
日志解密
审计日志加密使用 openssl 提供的接口,用 openssl 对日志文件进行加解密需要指定 key 和 iv,或者指定 password,命令示例如下:
# -d 表示解密
# -aes-256-cbc 表示使用 AES-256-CBC 算法
# -pass pass:password 表示使用 password 作为密码
# -md sha256 表示使用 SHA-256 算法
# -in encrypted_log_file 表示输入加密的日志文件
# -out decrypted_file 表示输出解密的日志文件
obclient > openssl enc -d -aes-256-cbc -pass pass:password -md sha256 -in encrypted_log_file -out decrypted_file
附录:日志文件名格式说明
归档后的审计日志文件名在时间戳后缀基础上,按是否启用压缩、加密追加约定片段(pwd_id 为密钥标识,与视图及函数参数对应):
| 场景 | 文件名格式 |
|---|---|
| 无压缩、无加密 | audit.log.timestamp |
| 仅压缩 | audit.log.timestamp.zst |
| 仅加密 | audit.log.timestamp.enc.pwd_id |
| 压缩且加密 | audit.log.timestamp.zst.enc.pwd_id |
其中 timestamp 与本文「设置输出路径」中示例的轮转文件名规则一致;若同时开启压缩,压缩扩展名以配置及实现为准(当前压缩算法为 ZSTD 时对应 .zst)。
相关文档
- 设置日志策略:audit_log_strategy
- 异步写入时设置日志 buffer 大小:audit_log_buffer_size
- 设置日志格式:audit_log_format
- 选择审计记录中的 SQL 语句,用于设置数据脱敏:audit_log_query_sql
- 设置日志输出路径:audit_log_path
- 设置日志归档大小:audit_log_rotate_on_size
- 设置日志清理大小:audit_log_max_size
- 设置日志清理时间:audit_log_prune_seconds
- 设置日志压缩:audit_log_compression
- 设置日志加密:audit_log_encryption
- 日志归档与解密设置函数:AUDIT_LOG_ENCRYPTION_PASSWORD_SET
- 日志归档与解密查询函数:AUDIT_LOG_ENCRYPTION_PASSWORD_GET
- 设置日志轮转:audit_log_rotate_on_size