分类:13.安全 | 篇章:01 认证与权限
免费详情
TDengine 提供基于用户的认证和细粒度的权限控制(RBAC),覆盖数据库、超级表、列、订阅多个层级。本文系统讲解用户管理、权限模型、最佳实践。
核心概念速查表
| 概念 | 说明 |
|---|---|
| User | 数据库用户 |
| Privilege | 权限(READ/WRITE/ALL) |
| Object | 权限对象(db / stable / column) |
| GRANT | 授权 |
| REVOKE | 撤销权限 |
| Super User | 超级用户(root) |
详细解析
1. 用户管理
-- 创建用户
CREATE USER user_name PASS 'password';
-- 创建用户带 SYSINFO 权限(视版本)
CREATE USER user_name PASS 'password' SYSINFO 1;
-- SYSINFO 0: 普通用户
-- SYSINFO 1: 可查看系统表
-- 修改密码
ALTER USER user_name PASS 'new_password';
-- 启用/禁用用户
ALTER USER user_name ENABLE 1;
ALTER USER user_name ENABLE 0;
-- 删除用户
DROP USER user_name;
-- 列出用户
SHOW USERS;
SELECT * FROM information_schema.ins_users;
密码规范:
- 至少 8 位
- 包含大小写字母 + 数字(推荐)
- 避免明文存储
2. 权限模型
权限层级(粗到细):
数据库 (DATABASE)
↓
超级表 (STABLE)
↓
列 (COLUMN)
↓
Tag 条件 (CONDITION)
权限类型:
- READ:读权限(SELECT)
- WRITE:写权限(INSERT, UPDATE, DELETE)
- ALL:全部权限(READ + WRITE + DDL)
特殊权限(视版本):
- SUBSCRIBE:订阅权限
- DROP TABLE:删除子表
3. 数据库级权限
-- 授予数据库权限
GRANT READ ON db_name.* TO user_name;
GRANT WRITE ON db_name.* TO user_name;
GRANT ALL ON db_name.* TO user_name;
-- 撤销权限
REVOKE READ ON db_name.* FROM user_name;
REVOKE ALL ON db_name.* FROM user_name;
-- 通配符
GRANT READ ON *.* TO user_name;
-- 所有数据库读权限
示例:分析师只读 power 库
CREATE USER analyst PASS 'Analyst@2026';
GRANT READ ON power.* TO analyst;
4. 表级权限
-- 授予特定超级表权限
GRANT READ ON db_name.stable_name TO user_name;
GRANT WRITE ON db_name.stable_name TO user_name;
示例:IoT 应用只写特定超级表
CREATE USER iot_writer PASS 'IoTWriter@2026';
GRANT WRITE ON iot.sensors TO iot_writer;
GRANT WRITE ON iot.events TO iot_writer;
-- iot_writer 不能写 iot 其他表
5. Tag 级权限(细粒度)
-- 基于 Tag 条件的权限
GRANT READ ON db_name.stable_name
WITH location = 'Beijing'
TO user_name;
-- 用户只能查 location='Beijing' 的子表
示例:北京分公司只看自己数据
CREATE USER beijing_team PASS 'Beijing@2026';
GRANT READ ON power.meters
WITH location = 'Beijing'
TO beijing_team;
应用场景:
- 多租户:不同租户看不同 Tag
- 区域隔离:按地域分权
- 部门隔离:按部门 Tag
6. 订阅权限
-- 订阅 Topic 权限
GRANT SUBSCRIBE ON topic_name TO user_name;
REVOKE SUBSCRIBE ON topic_name FROM user_name;
-- 应用消费者用专用账号
CREATE USER tmq_consumer PASS 'Consumer@2026';
GRANT SUBSCRIBE ON my_topic TO tmq_consumer;
7. 查看权限
-- 查看授予
SHOW GRANTS;
SHOW GRANTS FOR user_name;
-- 系统表
SELECT * FROM information_schema.ins_grants
WHERE user_name = 'analyst';
-- 输出示例
-- user_name | privilege | db_name | table_name | condition
-- analyst | READ | power | * | NULL
-- bj_team | READ | power | meters | location='Beijing'
8. 最佳实践
✓ 最小权限原则
- 应用用专用账号
- 仅授予必需权限
- 禁用 root 远程登录(生产)
✓ 账号分类
- 应用账号:READ/WRITE 限定库
- 分析账号:READ 限定库
- 管理账号:ALL,少数管理员
- 监控账号:READ 系统表
✓ 密码管理
- 强密码策略
- 定期更换
- 不在代码硬编码
- 用环境变量/Secret
✓ 审计
- 启用审计日志(企业版)
- 定期审查权限
- 及时回收离职人员权限
✓ 多租户隔离
- Tag 级权限
- 或独立数据库
代码示例
完整权限规划示例
-- 场景:多团队共享集群
USE power;
-- 1. 应用账号(读写)
CREATE USER app_writer PASS 'AppWriter@2026';
GRANT WRITE ON power.* TO app_writer;
CREATE USER app_reader PASS 'AppReader@2026';
GRANT READ ON power.* TO app_reader;
-- 2. 分析账号(只读,所有库)
CREATE USER analyst PASS 'Analyst@2026';
GRANT READ ON power.* TO analyst;
GRANT READ ON other_db.* TO analyst;
-- 3. 多租户隔离
CREATE USER beijing_team PASS 'BJTeam@2026';
GRANT READ ON power.meters WITH location='Beijing' TO beijing_team;
GRANT READ ON power.events WITH location='Beijing' TO beijing_team;
CREATE USER shanghai_team PASS 'SHTeam@2026';
GRANT READ ON power.meters WITH location='Shanghai' TO shanghai_team;
-- 4. 监控账号
CREATE USER monitor PASS 'Monitor@2026' SYSINFO 1;
GRANT READ ON log.* TO monitor;
GRANT READ ON performance_schema.* TO monitor;
-- 5. TMQ 消费者
CREATE USER tmq_app PASS 'TMQApp@2026';
GRANT SUBSCRIBE ON meters_topic TO tmq_app;
-- 6. 验证
SHOW USERS;
SHOW GRANTS FOR analyst;
SHOW GRANTS FOR beijing_team;
应用层使用
# 应用配置(环境变量)
import os
import taosws
conn = taosws.connect(
f"taosws://{os.environ['TD_USER']}:"
f"{os.environ['TD_PASSWORD']}@"
f"{os.environ['TD_HOST']}:6041/{os.environ['TD_DB']}"
)
# K8s Secret
apiVersion: v1
kind: Secret
metadata:
name: tdengine-credentials
type: Opaque
stringData:
TD_USER: app_writer
TD_PASSWORD: AppWriter@2026
权限审查脚本
#!/bin/bash
# audit_privileges.sh
# 1. 所有用户
echo "=== Users ==="
taos -s "SELECT name, super, enable, create_time FROM information_schema.ins_users"
# 2. 所有授权
echo "=== Grants ==="
taos -s "SELECT * FROM information_schema.ins_grants"
# 3. 超级用户列表
echo "=== Super users ==="
taos -s "SELECT name FROM information_schema.ins_users WHERE super=1"
# 4. 30 天未登录用户(视审计支持)
echo "=== Inactive users (30+ days) ==="
# 视审计日志可查
性能考量
权限检查开销
| 检查 | 开销 |
|---|---|
| 用户认证 | 极低(缓存) |
| 数据库权限 | 极低 |
| 表权限 | 低 |
| Tag 条件权限 | 中(查询时过滤) |
权限设计建议
| 场景 | 推荐 |
|---|---|
| 单租户 | 数据库级权限 |
| 多租户少量 | 表级权限 |
| 多租户大量 | Tag 级 + 独立库 |
FAQ
Q1: root 能改密码吗?
可以但不推荐改 root 密码后忘记。生产建议:
- 保留 root 强密码
- 创建专用管理员账号
- 应用用最小权限账号
Q2: 权限是即时生效吗?
是的。GRANT/REVOKE 后立即生效,无需重连。
Q3: 能继承组权限吗?
当前版本无组/角色概念。需对每个用户单独 GRANT。可用脚本批量管理。
Q4: 跨数据库 JOIN 需要哪些权限?
需要所有涉及表/库的 READ 权限。
Q5: 系统表(log, information_schema)权限?
普通用户默认只能看自己创建的对象。SYSINFO=1 用户可看系统表。
参考
系统构架篇
- 01-《TDengine 整体架构全景》
- 02-《集群拓扑深度解析》
- 03-《MNode 内部机制深度解析》
- 04-《RPC 通信层深度解析》
- 05-《VNode 生命周期》
- 06-《RAFT 共识协议》
- 07-《端到端的消息流》
数据模型
- 01-《数据库创建与参数详解》
- 02-《超级表/子表/普通表》
- 03-《支持数据类型深度解析》
- 04-《TDengine Tag 设计哲学与 Schema 变更机制》
- 05-《TDengine 虚拟表实现原理》
存储引擎
- 01-《TDengine 存储引擎概览》
- 02-《TDengine MemTable 深度解析》
- 03-《TDengine WAL 预写日志机制》
- 04-《TDengine 数据文件格式》
- 05-《TDengine Commit 与 Flush 机制 》
- 06-《TDengine Compaction 合并策略 》
- 07-《TDengine 数据保留与 TTL》
- 08-《TDengine 压缩编码机制》
- 09-《TDengine Cache 与 Last 查询加速》
- 10-《TDengine 逻辑计划生成》
查询引擎
- 01-《TDengine 查询引擎概览》
- 02-《TDengine SQL 解析与词法分析》
- 03-《TDengine 语义分析与 AST 重写》
- 04-《TDengine 逻辑计划生成》
- 05-《TDengine 物理计划生成》
- 06-《TDengine 扫描算子》
- 07-《TDengine 聚合算子》
- 08-《TDengine 连接算子》
- 09-《TDengine 排序、填充与投影》
- 10-《TDengine 分布式查询执行》
- 11-《TDengine EXPLAIN 与查询优化》
数据写入
- 01-《TDengine SQL INSERT》
- 02-《TDengine 无模式写入》
- 03-《TDengine STMT 写入》
- 04-《TDengine 写入内部流程》
- 05-《TDengine 数据更新删除》
数据订阅
- 01-《TDengine 数据订阅》
- 02-《TDengine 订阅 vs Kafka》
- 03-《TDengine TMQ 消费流程》
- 04-《TDengine 内部机制》
- 05-《TDengine TMQ 最佳实践》
预聚合
索引
SQL 语句
- 01-《TDengine DDL》
- 02-《TDengine DML SELECT》
- 03-《TDengine DML 函数完整参考》
- 04-《TDengine JOIN 完整语法》
- 05-《TDengine 窗口完整语法》
- 06-《TDengine 操作符与表达式》
- 07-《TDengine 系统表》
- 08-《TDengine SQL 与标准 SQL 差异》
客户端与连接器
- 01-《TDengine 的连接方式》
- 02-《TDengine C/C++ 连接器》
- 03-《TDengine java 连接器》
- 04-《TDengine Python 连接器》
- 05-《TDengine Go 与 Rust 连接器》
- 06-《TDengine Node.js 与 C# 连接器》
运维
- 01-《TDengine 部署指南》
- 02-《TDengine 配置详解》
- 03-《TDengine 监控系统》
- 04-《TDengine 备份与恢复》
- 05-《TDengine 版本升级》
- 06-《TDengine 故障排查》
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。


1237

被折叠的 条评论
为什么被折叠?



