TDengine 审计日志配置与合规追溯指南:taosd 参数、审计库与安全运维实践
2026/9/13 17:27:38 网站建设 项目流程

TDengine 审计日志配置与合规追溯指南:taosd 参数、审计库与安全运维实践

【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine

本指南聚焦 TDengine Enterprise 的审计(Audit)与合规追溯能力:审计日志如何从taosd产生,经由taosKeeper上报到目标集群的审计库,或自v3.4.1.0起直接落盘到本地集群;以及auditLevel分级体系、审计库建库约束、SYSAUDIT/SYSAUDIT_LOG权限模型与安全公告流程。读完本文,你将能够独立完成审计开关配置、审计库创建、分级审计策略调整与审计日志查询,并理解其底层实现。

引言:什么是 TDengine 审计与合规

TDengine 的审计能力用于记录用户与系统操作,供安全监控和历史追溯使用。审计日志可以由taosKeeper写入目标集群的审计数据库,也可以自v3.4.1.0起通过开启auditSaveInSelf直接存储在本地集群。

本文所称"合规"指:通过可配置的审计轨迹(audit trail)支持内部审计与运维追溯,并依据 Security Advisories 及时应用漏洞修复。本文不声称满足任何特定外部认证或法规要求

需要特别说明:TDengine 审计能力为Enterprise(企业版)专属,Community(社区版)不提供审计功能。相关能力入口与依赖:

  • 审计库权限与职责分离(SYSAUDIT/SYSAUDIT_LOG)见 Privileges · Audit Database。
  • 审计库加密要求见 Data-at-Rest Protection。
  • 持久化数据防篡改说明见 Full-Trace Reliability。

版本与能力演进

版本能力
v3.1.0.0/v3.1.1.0企业版审计开关与上报间隔;记录经由taosKeeper写入。
v3.3.9.0引入IS_AUDIT关键字用于标记审计数据库。
v3.4.0.0审计级别 1–5、auditHttps/auditUseToken;审计库加密 /KEEP/WAL_LEVEL/ 纳秒精度约束;SYSAUDIT模型。
v3.4.1.0auditSaveInSelf:无需taosKeeper直接写入本地集群。

建议尽量使用最新企业版。以下内容均以当前仓库所对应的最新版本语义为准。

1. 写入路径总览

审计日志存在两条互斥的主写入路径:

路径条件说明
经由taosKeeperauditSaveInSelf = 0(默认)taosdauditInterval上报 -> Keeper -> 目标集群中的审计库,目标集群可为远程集群。
存储在本地集群auditSaveInSelf = 1v3.4.1.0+通过集群内部 RPC 写入本地审计库。monitorFqdn/monitorPort/monitorCompaction/auditHttps/auditUseToken不再生效不支持将审计日志写入其他集群。

与监控指标的区别taosKeeper的监控指标默认写入log库;审计记录写入以IS_AUDIT标记的审计库(默认常命名为audit)。二者不是同一个库。在 taoskeeper_enterprise.toml 中可同时看到[metrics.database](默认name = "log")与[audit.database](默认name = "audit")两套独立配置。

1.1 经由 taosKeeper 上报

  1. taosd上配置audit = 1,并设置monitorFqdn/monitorPort指向 Keeper。
  2. 在目标侧创建满足约束的审计库,或让 Keeper 按其配置自动创建。
  3. 如需基于 token 上报,设置auditUseToken = 1,并为写入侧准备具备SYSAUDIT_LOG的账号或 token;详见 Privileges。

1.2 存储在本地集群

-- 创建加密审计库;VGROUPS 必须为 1 CREATE DATABASE audit VGROUPS 1 IS_AUDIT 1 ENCRYPT_ALGORITHM 'SM4-CBC' WAL_LEVEL 2 PRECISION 'ns'; ALTER ALL DNODES 'audit' '1'; ALTER ALL DNODES 'auditSaveInSelf' '1'; ALTER ALL DNODES 'auditLevel' '3'; -- 按需提升至 4 / 5 -- 查询;请使用实际创建的库名 SELECT * FROM audit.operations ORDER BY ts DESC LIMIT 100;

2. taosd 审计参数

参数含义企业版默认值引入版本
audit审计总开关(0/1)。1v3.1.0.0
auditInterval上报间隔(毫秒)。5000v3.1.0.0
auditLevel审计级别:0关闭分级;1系统级到5数据级。高级别包含低级别。3(数据库级)v3.4.0.0
auditHttps上报 Keeper 是否使用 HTTPS。0v3.4.0.0
auditUseToken上报是否使用 token 认证。1v3.4.0.0
auditCreateTable是否审计子表创建;需要auditLevel >= 41v3.1.0.0
auditSaveInSelf是否将审计记录写入本地集群而非 Keeper。0v3.4.1.0
monitorFqdn/monitorPortKeeper 地址,Keeper 路径使用。--
monitorCompaction上报是否压缩。--

从源码看,这些参数的注册位于 tglobal.c,其配置元数据可以印证文档语义:

  • auditLevelInt32,取值范围0–5,作用域CFG_SCOPE_SERVER,支持动态修改(CFG_DYN_SERVER),权限类别为CFG_PRIV_AUDIT
  • auditCreateTable/auditHttps/auditUseToken/auditSaveInSelf为布尔型(CFG_DYN_ENT_SERVER,企业版动态)。
  • auditInterval取值范围500–200000毫秒,同样支持动态修改。

auditSaveInSelfauditLevelauditInterval等还出现在 clientHb.c 等客户端与 mnode 相关实现中,说明该配置会下发到集群各 dnode 生效。大多数audit*参数支持动态 SQL 修改,例如:

ALTER ALL DNODES 'auditLevel' '5'; SHOW VARIABLES LIKE 'audit%';

:::note 如果配置参考中出现enableAuditSelectenableAuditInsertenableAuditDelete等细粒度开关,它们是内部/测试导向参数。公开部署时auditLevel = 5已覆盖 insert/select/delete,无需单独配置。 :::

3. 创建审计数据库

开启审计后,集群中必须存在一个审计库。使用IS_AUDIT 1创建:

CREATE DATABASE [IF NOT EXISTS] db_name [database_options] IS_AUDIT 1;

本地集群写入的常见组合:

CREATE DATABASE audit VGROUPS 1 IS_AUDIT 1 ENCRYPT_ALGORITHM 'SM4-CBC' WAL_LEVEL 2 PRECISION 'ns' KEEP 1825d;

v3.4.0.0+服务端强制执行的约束:

项目要求
数量集群中仅允许一个审计库,以is_audit标识;库名不固定。
VGROUPS必须为1,Keeper 与本地集群两条路径均如此。
KEEP默认1825d(5 年);若指定必须 >=1825d
WAL_LEVEL默认2;不可改为其他值。
ENCRYPT_ALGORITHM不能为none;必须是 CBC 对称算法,如'SM4-CBC'
PRECISION默认ns;不可改为其他精度。
ALLOW_DROP审计库默认为0;删除前需置为1,且只有SYSAUDIT可修改或删除审计库。

创建审计库时,系统会在同一事务中自动创建operations超级表。在 Keeper 路径下,Keeper 会自动建表或补充缺失列。IS_AUDIT关键字的词法/语法与语义定义可分别参见 parTokenizer.c 与 sql.y(IS_AUDIT关键字)以及 parTranslater.c(语义转换),DDL 入口见 Databases · IS_AUDIT。

升级兼容性

  • v3.4.0.0之前创建的审计库与新的规则不兼容。旧库在新语义下无法开启IS_AUDIT,也不强制新的DURATION/WAL/ 加密约束。如有可能请按新规则重建。
  • 若必须在v3.4.0.0+继续消费旧审计库数据,可将auditUseToken置为0作为临时方案。

4. taosKeeper 配置

配置文件通常位于/etc/taos/taoskeeper.toml;企业版安装包附带示例taoskeeper_enterprise.toml。审计相关段落如下:

[audit] enable = true [audit.database] name = "audit" [audit.database.options] vgroups = 1 buffer = 16 cachemodel = "both"
配置含义
audit.enable是否启用审计接收。
audit.database.name审计库名;默认"audit"。不存在时可自动创建。
audit.database.options建库选项,如vgroups = 1

从 audit.go 的 Go 实现可看到每个配置项的默认值、命令行 flag 与环境变量:

  • audit.enable:默认true,环境变量TAOS_KEEPER_AUDIT_ENABLE
  • audit.database.name:默认"audit",环境变量TAOS_KEEPER_AUDIT_DATABASE
  • audit.database.options.vgroups:默认1,环境变量TAOS_KEEPER_AUDIT_VGROUPS
  • audit.database.options.buffer:默认16,环境变量TAOS_KEEPER_AUDIT_BUFFER
  • audit.database.options.cachemodel:默认"both",环境变量TAOS_KEEPER_AUDIT_CACHEMODEL

即除修改 TOML 文件外,也可通过同名环境变量注入配置。Keeper 同时处理监控指标(默认写入log库),与审计库相互独立;组件详情见 taosKeeper。

5. 数据格式与表结构

上报的 JSON 示例:

{ "ts": timestamp, "cluster_id": string, "user": string, "operation": string, "db": string, "resource": string, "client_add": string, "details": string, "affected_rows": integer, "duration": double }

与当前 Keeper 及auditSaveInSelf两条路径对齐的超级表结构:

CREATE STABLE IF NOT EXISTS operations ( ts TIMESTAMP, user_name VARCHAR(25), operation VARCHAR(20), db VARCHAR(65), resource VARCHAR(193), client_address VARCHAR(64), details VARCHAR(50000), affected_rows BIGINT UNSIGNED, `duration` DOUBLE ) TAGS (cluster_id VARCHAR(64));

说明:

  • JSON 字段client_add映射到列client_address,包含 IP 与端口。
  • db/resource标识操作涉及的数据库与对象;details通常是 SQL,敏感字段(如密码)会被省略。
  • affected_rows/duration主要用于级别 5 的数据级审计场景。旧表可能被 Keeper 自动 ALTER 以补充缺失列。Keeper 侧对审计表的管理实现在 audit.go 及其测试 audit_test.go。

6. 操作清单(分级)

高级别在低级别基础上覆盖更多对象。auditLevel = N记录级别1...N的操作。由于每行中操作者(user/client_add)与时间戳含义相同,下表不再重复列出。

6.1auditLevel = 1(系统)

操作OperationDBResourceDetails
create dnodecreateDnodeNULLIP:Port 或 FQDN:PortSQL
drop dnodedropDnodeNULLdnodeIdSQL
alter dnodealterDnodeNULLdnodeIdSQL
create mnodecreateMnodeNULLdnodeIdSQL
drop mnodedropMnodeNULLdnodeIdSQL
create qnodecreateQnodeNULLdnodeIdSQL
drop qnodedropQnodeNULLdnodeIdSQL
restore dnoderestoreDnodeNULLdnodeIdSQL

6.2auditLevel = 2(集群)

操作OperationDBResourceDetails
alter clusteralterClusterNULLNULLSQL
balance vgroup leaderbalanceVgroupLeadNULLNULLSQL
redistribute vgroupredistributeVgroupNULLvgroupIdSQL
balance vgroupbalanceVgroupNULLvgroupIdSQL
assign leaderassignLeaderNULLNULLSQL
grant privilegesgrantPrivilegesNULL被授权的用户SQL
revoke privilegesrevokePrivilegesNULL被撤销权限的用户SQL
loginloginNULLNULLappName
create usercreateUserNULL被创建的用户用户属性,不含密码
alter useralterUserNULL被修改的用户密码修改仅记录参数名与新值,不含密码;其他修改记录 SQL
drop userdropUserNULL被删除的用户SQL
create mountcreateMountmountNameNULLSQL
drop mountdropMountmountNameNULLSQL
kill retentionkillRetentiondb 名NULLSQL
auto trimDBautoTrimDBdb 名NULLSQL
create encrypt algrcreateEncryptAlgrNULLalgorithmIdSQL
drop encrypt algrdropEncryptAlgrNULLalgorithmIdSQL

6.3auditLevel = 3(数据库)

操作OperationDBResourceDetails
create databasecreateDBdb 名NULLSQL
alter databasealterDBdb 名NULLSQL
drop databasedropDBdb 名NULLSQL
compact databasecompact库名NULLSQL
kill compactkillCompactdb 名NULLSQL
create stablecreateStbdb 名stable 名SQL
alter stablealterStbdb 名stable 名SQL
drop stabledropStbdb 名stable 名SQL
create streamcreateStreamNULLstream 名SQL
drop streamdropStreamNULLstream 名SQL
recalc streamrecalcStreamstreamNamerecalcNameSQL
create topiccreateTopictopic 所属库topic 名SQL
drop topicdropTopictopic 所属库topic 名SQL
reload topicreloadTopictopic 所属库topic 名SQL
create RsmacreateRsmaRsma 名NULLSQL
alter RsmaalterRsmaRsma 名表名SQL
drop RsmadropRsmaRsma 名NULLSQL
create ViewcreateViewDb 名NULLSQL
drop ViewdropViewDb 名view 名SQL

6.4auditLevel = 4(子表)

操作OperationDBResourceDetails
create tablecreateTabledb 名表名SQL
drop tabledropTabledb 名表名SQL

子表创建还受auditCreateTable控制:当其值为0时,即使auditLevel >= 4也不记录子表创建。

6.5auditLevel = 5(数据)

操作OperationDBResourceDetails
insertinsertdb 名表名SQL
selectselectdb 名表名SQL
deletedeletedb 名表名SQL

数据级审计记录由客户端在语句成功执行后上报。这会显著增加写入量,需权衡合规需求与性能开销。

在 mnode 实现中,各级操作会在对应处理函数里做tsAuditLevel >= AUDIT_LEVEL_*判断后写入审计,例如 mndDnode.c 的数据级判断(同时要求tsEnableAudit开启)、mndDb.c 的数据库级判断、mndCluster.c 的集群级判断以及 mndConfig.c 的系统级判断,可据此确认分级过滤在服务端按级别逐层生效。

7. 查看与操作

taosd与 Keeper 正确配置并启动后(未启用本地集群写入时),可通过以下方式查看审计日志:

  • taosExplorer:系统管理 -> 审计。
  • SQL
SHOW VARIABLES LIKE 'audit%'; SELECT name, is_audit, allow_drop, `encrypt_algorithm`, precision FROM information_schema.ins_databases WHERE is_audit = 1; SELECT ts, user_name, operation, db, resource, client_address, details FROM audit.operations ORDER BY ts DESC LIMIT 100;

删除审计库前,仅限SYSAUDIT执行:

ALTER DATABASE audit ALLOW_DROP 1; DROP DATABASE audit;

8. 权限与防篡改说明

  • 写入审计表需要SYSAUDIT_LOG;查看审计表需要SYSAUDIT。普通业务账号不应拥有审计库写权限。
  • 权限模型不允许删除或修改审计表及其行。
  • 审计库默认ALLOW_DROP = 0,防止误删。
  • 在职责分离下,将SYSDBASYSSECSYSAUDIT分配给不同人员。完整规则见 Privileges。

依据 02-grant.md 中的权限模型:SYSAUDIT为审计管理员,负责独立审计监督、审计库管理与审计日志查看,且不能查看业务数据;SYSAUDIT_LOG可在审计库建表写数据,但不能删除/修改表与数据,且不能与SYSDBA/SYSSEC/SYSAUDIT同时授予同一用户。同时,只有SYSAUDIT可删除和修改审计库,只有SYSAUDIT_LOG角色可向审计库写入数据。

9. 安全公告与漏洞披露

已知安全漏洞、受影响版本及修复版本发布在 Security Advisories。如果你发现未公开的漏洞,请使用该页面提供的渠道私下报告,不要在公开论坛或 issue 中讨论未修复的问题。

加固与部署指引见 Security Hardening。

10. 延伸阅读

主题文档
taosd 审计参数taosd
taosKeepertaosKeeper
审计库 DDL / 权限Databases、Privileges
审计库加密Data-at-Rest Protection
全链路认证中的审计汇总Full-Trace Authentication

【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询