TDengine 认证与权限 — 用户、角色、RBAC

分类 :13.安全 | 篇章 :01 认证与权限

免费详情


TDengine 提供基于用户的认证和细粒度的权限控制(RBAC),覆盖数据库、超级表、列、订阅多个层级。本文系统讲解用户管理、权限模型、最佳实践。

核心概念速查表

概念 说明
User 数据库用户
Privilege 权限(READ/WRITE/ALL)
Object 权限对象(db / stable / column)
GRANT 授权
REVOKE 撤销权限
Super User 超级用户(root)

详细解析

1. 用户管理

sql 复制代码
-- 创建用户
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. 数据库级权限

sql 复制代码
-- 授予数据库权限
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. 表级权限

sql 复制代码
-- 授予特定超级表权限
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 级权限(细粒度)

sql 复制代码
-- 基于 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. 订阅权限

sql 复制代码
-- 订阅 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. 查看权限

sql 复制代码
-- 查看授予
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 级权限
  - 或独立数据库

代码示例

完整权限规划示例

sql 复制代码
-- 场景:多团队共享集群
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;

应用层使用

python 复制代码
# 应用配置(环境变量)
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']}"
)
yaml 复制代码
# K8s Secret
apiVersion: v1
kind: Secret
metadata:
  name: tdengine-credentials
type: Opaque
stringData:
  TD_USER: app_writer
  TD_PASSWORD: AppWriter@2026

权限审查脚本

bash 复制代码
#!/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 用户可看系统表。

参考

系统构架篇

数据模型

存储引擎

查询引擎

数据写入

数据订阅

预聚合

索引

SQL 语句

客户端与连接器

运维

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
梦想的旅途22 小时前
企业微信自动化:自动发送文本、图片、文件
前端·数据库·microsoft
湘美书院--湘美谈教育2 小时前
湘美书院人工智能访谈录:AI助力科学研究自动化
大数据·运维·人工智能·机器学习·自动化·电脑·生活
JNX_SEMI2 小时前
Hi5000Q/H 6.5~75V宽输入——与H5227A完全对等,无缝适配现有电源方案-聚能芯-智芯官方授权一级代理
驱动开发·单片机·嵌入式硬件·物联网·硬件工程
IvorySQL2 小时前
PostgreSQL 日报|复制槽泄漏修复(8 月 6 日)
数据库·postgresql
XWalnut2 小时前
MySQL入门到精通
数据库·mysql
倍利福猎头公司官方账号2 小时前
人形机器人分析——电机(机器人猎头公司专项分析)
大数据·人工智能·机器人·求职招聘·业界资讯
稳石氢能2 小时前
政策落地与市场冷遇并存,氢能产业如何跨越“最后一公里”?
大数据·人工智能
John jj2 小时前
拆解 Telegram 群组频道收录市场:三类方案,一个可运行的评分模型,目前TG中文人工评分加模型评分机制——LetsTG收录“快速”、“无门槛”
大数据·后端·python·深度学习·搜索引擎·django·全文检索
@Mike@2 小时前
07-数据库学习笔记(数据库哈希表)
数据库·哈希算法·散列表
sunywz2 小时前
【从零搭建物联网智能充电桩系统】6、用户服务与钱包:微信登录、JWT 鉴权与乐观锁并发控制
物联网