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 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
huashengzsj2 小时前
2026年WordPress建站公司推荐:哪些服务商更适合长期运营网站?
大数据·人工智能·云计算
qyyyyy5702 小时前
PDF 转 JSON 怎么做?从表格和元数据提取到 LLM 结构化处理
数据库·pdf·json·erlang·llama
今天AI了吗2 小时前
从“金鱼脑”到“大象记忆”:AI Agent 短期记忆与长期记忆的存储与检索全解
数据库·人工智能·python·sql·rust
BD_Marathon2 小时前
Hadoop组成
大数据·hadoop·分布式
whcyhhh2 小时前
头歌实践教学平台:数据科学与大数据技术导论(十八4)
大数据·开发语言·python
Java小白笔记2 小时前
Codex CLI 使用与斜杠指令实战教程
服务器·数据库·oracle
养生技术人2 小时前
Oracle OCP认证考试题目详解082系列第16题
数据库·sql·oracle·ocp
红色星际2 小时前
新石器走进无人配送车下半场
大数据·人工智能
搭贝2 小时前
国资报送责任制怎么建?三级责任矩阵设计
android·数据库·人工智能·线性代数·低代码·矩阵·制造
杨云龙UP2 小时前
Linux 下 MySQL 常用登录方式及 Socket 排查指南
linux·运维·数据库·mysql·登录·xtrabackup·主从复制