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

分类: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 用户可看系统表。

参考

系统构架篇

数据模型

存储引擎

查询引擎

数据写入

数据订阅

预聚合

索引

SQL 语句

客户端与连接器

运维

关于 TDengine

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TDengine (老段)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值