
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默认taosd按auditInterval上报 - 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 上报在taosd上配置audit 1并设置monitorFqdn/monitorPort指向 Keeper。在目标侧创建满足约束的审计库或让 Keeper 按其配置自动创建。如需基于 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.0auditInterval上报间隔毫秒。5000v3.1.0.0auditLevel审计级别0关闭分级1系统级到5数据级。高级别包含低级别。3数据库级v3.4.0.0auditHttps上报 Keeper 是否使用 HTTPS。0v3.4.0.0auditUseToken上报是否使用 token 认证。1v3.4.0.0auditCreateTable是否审计子表创建需要auditLevel 4。1v3.1.0.0auditSaveInSelf是否将审计记录写入本地集群而非 Keeper。0v3.4.1.0monitorFqdn/monitorPortKeeper 地址Keeper 路径使用。--monitorCompaction上报是否压缩。--从源码看这些参数的注册位于 tglobal.c其配置元数据可以印证文档语义auditLevel为Int32取值范围0–5作用域CFG_SCOPE_SERVER支持动态修改CFG_DYN_SERVER权限类别为CFG_PRIV_AUDIT。auditCreateTable/auditHttps/auditUseToken/auditSaveInSelf为布尔型CFG_DYN_ENT_SERVER企业版动态。auditInterval取值范围500–200000毫秒同样支持动态修改。auditSaveInSelf、auditLevel、auditInterval等还出现在 clientHb.c 等客户端与 mnode 相关实现中说明该配置会下发到集群各 dnode 生效。大多数audit*参数支持动态 SQL 修改例如ALTER ALL DNODES auditLevel 5; SHOW VARIABLES LIKE audit%;:::note 如果配置参考中出现enableAuditSelect、enableAuditInsert、enableAuditDelete等细粒度开关它们是内部/测试导向参数。公开部署时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必须为1Keeper 与本地集群两条路径均如此。KEEP默认1825d5 年若指定必须 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.yIS_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系统操作OperationDBResourceDetailscreate dnodecreateDnodeNULLIP:Port 或 FQDN:PortSQLdrop dnodedropDnodeNULLdnodeIdSQLalter dnodealterDnodeNULLdnodeIdSQLcreate mnodecreateMnodeNULLdnodeIdSQLdrop mnodedropMnodeNULLdnodeIdSQLcreate qnodecreateQnodeNULLdnodeIdSQLdrop qnodedropQnodeNULLdnodeIdSQLrestore dnoderestoreDnodeNULLdnodeIdSQL6.2auditLevel 2集群操作OperationDBResourceDetailsalter clusteralterClusterNULLNULLSQLbalance vgroup leaderbalanceVgroupLeadNULLNULLSQLredistribute vgroupredistributeVgroupNULLvgroupIdSQLbalance vgroupbalanceVgroupNULLvgroupIdSQLassign leaderassignLeaderNULLNULLSQLgrant privilegesgrantPrivilegesNULL被授权的用户SQLrevoke privilegesrevokePrivilegesNULL被撤销权限的用户SQLloginloginNULLNULLappNamecreate usercreateUserNULL被创建的用户用户属性不含密码alter useralterUserNULL被修改的用户密码修改仅记录参数名与新值不含密码其他修改记录 SQLdrop userdropUserNULL被删除的用户SQLcreate mountcreateMountmountNameNULLSQLdrop mountdropMountmountNameNULLSQLkill retentionkillRetentiondb 名NULLSQLauto trimDBautoTrimDBdb 名NULLSQLcreate encrypt algrcreateEncryptAlgrNULLalgorithmIdSQLdrop encrypt algrdropEncryptAlgrNULLalgorithmIdSQL6.3auditLevel 3数据库操作OperationDBResourceDetailscreate databasecreateDBdb 名NULLSQLalter databasealterDBdb 名NULLSQLdrop databasedropDBdb 名NULLSQLcompact databasecompact库名NULLSQLkill compactkillCompactdb 名NULLSQLcreate stablecreateStbdb 名stable 名SQLalter stablealterStbdb 名stable 名SQLdrop stabledropStbdb 名stable 名SQLcreate streamcreateStreamNULLstream 名SQLdrop streamdropStreamNULLstream 名SQLrecalc streamrecalcStreamstreamNamerecalcNameSQLcreate topiccreateTopictopic 所属库topic 名SQLdrop topicdropTopictopic 所属库topic 名SQLreload topicreloadTopictopic 所属库topic 名SQLcreate RsmacreateRsmaRsma 名NULLSQLalter RsmaalterRsmaRsma 名表名SQLdrop RsmadropRsmaRsma 名NULLSQLcreate ViewcreateViewDb 名NULLSQLdrop ViewdropViewDb 名view 名SQL6.4auditLevel 4子表操作OperationDBResourceDetailscreate tablecreateTabledb 名表名SQLdrop tabledropTabledb 名表名SQL子表创建还受auditCreateTable控制当其值为0时即使auditLevel 4也不记录子表创建。6.5auditLevel 5数据操作OperationDBResourceDetailsinsertinsertdb 名表名SQLselectselectdb 名表名SQLdeletedeletedb 名表名SQL数据级审计记录由客户端在语句成功执行后上报。这会显著增加写入量需权衡合规需求与性能开销。在 mnode 实现中各级操作会在对应处理函数里做tsAuditLevel AUDIT_LEVEL_*判断后写入审计例如 mndDnode.c 的数据级判断同时要求tsEnableAudit开启、mndDb.c 的数据库级判断、mndCluster.c 的集群级判断以及 mndConfig.c 的系统级判断可据此确认分级过滤在服务端按级别逐层生效。7. 查看与操作在taosd与 Keeper 正确配置并启动后未启用本地集群写入时可通过以下方式查看审计日志taosExplorer系统管理 - 审计。SQLSHOW 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防止误删。在职责分离下将SYSDBA、SYSSEC、SYSAUDIT分配给不同人员。完整规则见 Privileges。依据 02-grant.md 中的权限模型SYSAUDIT为审计管理员负责独立审计监督、审计库管理与审计日志查看且不能查看业务数据SYSAUDIT_LOG可在审计库建表写数据但不能删除/修改表与数据且不能与SYSDBA/SYSSEC/SYSAUDIT同时授予同一用户。同时只有SYSAUDIT可删除和修改审计库只有SYSAUDIT_LOG角色可向审计库写入数据。9. 安全公告与漏洞披露已知安全漏洞、受影响版本及修复版本发布在 Security Advisories。如果你发现未公开的漏洞请使用该页面提供的渠道私下报告不要在公开论坛或 issue 中讨论未修复的问题。加固与部署指引见 Security Hardening。10. 延伸阅读主题文档taosd 审计参数taosdtaosKeepertaosKeeper审计库 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),仅供参考