用户及权限管理

用户与权限管理可以实现不同用户对不同数据库的访问权限控制,防止未授权用户恶意访问或篡改数据,从而提高数据库的安全性。Lindorm时序引擎默认未启用用户认证与权限校验。您需要手动开启用户认证与权限校验。开启后,连接时添加用户信息,鉴权通过才能连接成功。本文介绍如何开启用户认证与权限校验,如何在连接信息中添加用户信息,以及常用SQL和HTTP API的所需权限。

时序引擎的访问控制体系

Lindorm提供了一套多层次的访问控制体系,从而提供企业级应用的安全保障。访问控制体系如下所示:

  • 第一层:阿里云提供的管理用户身份与资源访问权限服务RAM。

  • 第二层:实例级别的物理层面访问控制

    使用方法,请参见设置白名单

  • 第三层:引擎级别的逻辑层面访问控制

    引擎级别提供的基于用户认证以及权限校验为主体的访问控制。

注意事项

  • Lindorm实例创建后会默认创建一个初始用户。默认用户名和密码均为root_tsdb(3.4.30以下版本默认用户和密码均为root)。实例创建完成后,请立即修改初始用户的密码,避免安全隐患。

  • 开启用户认证与权限校验后,如果正在运行中的业务访问未包含用户信息,会发生访问中断,需添加用户信息后重启应用。因此,在开启该功能前,建议仔细规划并充分评估影响。

开启用户认证与权限校验

用户认证与权限校验默认关闭。您需要登录数据库,开启用户认证与权限校验。

开启方法

ALTER SYSTEM SET USER_AUTH=TRUE;
说明

开启用户认证与权限校验后,也可通过ALTER SYSTEM SET USER_AUTH=FALSE;关闭该功能。关闭后,将无法进行认证与权限校验,会有安全风险,建议不要关闭用户认证与权限校验。

查看开启状态

SHOW PARAMETER USER_AUTH;

连接信息添加用户信息

开启用户认证与权限校验后,业务对时序引擎的访问都需要在连接时带上用户名和密码。无论是写入还是查询,连接所属用户必须要具有访问目标的对应权限,操作才能成功。通过这种方式,时序引擎可以对业务访问进行严格的安全控制以及权限隔离。

使用示例

lindorm-cli

lindorm-cli -url <Lindorm时序SQL地址> -username <用户名> -password <密码> -database <目标数据库名>

详细的lindorm-cli连接文档,请参见通过Lindorm-cli连接并使用Lindorm时序引擎

JDBC

String url = "<Lindorm时序SQL地址>";
String username = "<用户名>";
String password = "<密码>";
Connection conn = null;

try {
    conn = DriverManager.getConnection(url, username, password);
    // 连接成功,执行操作
} catch (SQLException e) {
    e.printStackTrace();
}

详细的JDBC连接文档,请参见通过JDBC Driver连接并访问Lindorm时序引擎

Druid

dataSource.setDriver(DriverManager.getDriver("<Lindorm时序SQL地址>"))
dataSource.setUrl("<Lindorm时序SQL地址>")
dataSource.setUsername("<用户名>")
dataSource.setPassword("<密码>")

详细的Druid连接文档,请参见通过Druid连接池连接并访问时序引擎

HTTP API

对于使用OpenTSDB兼容的HTTP API访问时序引擎的应用,当用户认证与权限校验功能启用时,发送请求到API,也需要指定用户信息。

指定用户信息的方法

指定方法类似调用通用SQL接口,通过在HTTP请求头中加入基于Basic Authentication协议编码的用户认证信息,详细可参见用户认证信息指定

说明

使用时间序列数据库TSDB SDK的业务,可以通过创建TSDBConfig对象时调用basicAuth方法来指定用户名和密码。

url = "<Lindorm时序HTTP地址>/api/v2/sql"
username = "<用户名>"
password = "<用户名>"
auth = HTTPBasicAuth(username, password)


headers = {
    "Content-Type": "text/plain",
    "Authorization": f"Basic {base64.b64encode(f'{username}:{password}'.encode()).decode()}"
}

详细的HTTP API连接文档,请参见请求内容

调用HTTP API所需的权限信息,请参见访问OpenTSDB兼容API所需的权限

用户与权限管理

权限模型

权限类型

时序引擎中的权限分为四种:

权限名

含义

READ

读权限。查询数据时,要求用户对查询所涉及的数据表具有读权限。

WRITE

写权限。写入数据时,要求用户对查询所涉及的数据表具有写权限。

ADMIN

管理权限。对时序引擎中的数据对象进行管理时,需要用户对操作的数据对象具有管理权限。

SYSTEM

系统权限。当操作可能会影响整个实例的行为时,需要用户具有系统权限。

授权范围

时序引擎支持限定用户授权的范围。时序引擎支持的授权范围如下:

  • GLOBAL

    全局范围的授权与撤回。

    当用户被赋予全局范围的权限后,用户则拥有了对于整个时序引擎内所有数据对象的对应操作权限。例如,全局的READ权限将允许用户查询任意数据库中的任意时序数据表。

  • DATABASE

    数据库粒度的授权与撤回。

    当用户被赋予某个数据库的权限后,用户则拥有了对于该数据库内部所有数据对象的对应操作权限。例如,某个数据库DB1的READ权限将允许用户查询该数据库内的所有时序数据表。

授权规则

  • 系统权限(SYSTEM)为全局(GLOBAL)权限。

  • 只有具有系统权限(SYSTME)或全局(GLOBAL)的管理权限(ADMIN)的用户,可以创建或删除用户、授权、回收权限。

  • 用户实际的权限是其拥有的所有权限的并集。例如,如果用户具有全局(GLOBAL)的读权限(READ),同时具有某个数据库(DATABASE)的读权限(READ),则可以查询时序引擎内所有数据库的数据。

管理用户与权限

时序引擎支持通过SQL和宽表引擎集群管理系统管理用户与权限。

SQL管理用户与权限

集群管理系统管理用户与权限

时序引擎的用户信息与权限数据与宽表引擎通用。如果您也开通了宽表引擎,可以登录宽表引擎的集群管理系统管理用户与权限。集群管理系统的用法,请参见登录集群管理系统

重要
  • 宽表引擎集群管理系统支持TRASH权限,该权限目前在时序引擎中无实际意义。

  • 如果宽表引擎中的Namespace与时序引擎的Database同名,且某个用户拥有该Namespace的权限,则该用户默认就拥有了时序引擎同名Database的相应权限。

常用SQL所需权限

常用的SQL语句所需的权限可参见下表。

说明

下表中○表示需要的权限,×表示不需要的权限。

SQL语句

GLOBAL

DATABASE

备注

READ

WRITE

ADMIN

SYSTEM

READ

WRITE

ADMIN

SELECT...FROM...

×

×

×

×

×

-

INSERT INTO...VALUES...

×

×

×

×

×

-

INSERT INTO...SELECT...

×

×

×

需要INSERT目标表的WRITE权限,以及SELECT源表的READ权限。

DESCRIBE DATABASE ...

×

×

×

×

×

-

CREATE DATABASE...

×

×

×

×

×

×

-

ALTER DATABASE...

×

×

×

×

×

-

DROP DATABASE...

×

×

×

×

×

-

SHOW DATABASES

×

×

×

×

×

×

-

DESCRIBE TABLE ...

×

×

×

×

×

-

CREATE TABLE...

×

×

×

×

×

-

DROP TABLE...

×

×

×

×

×

-

CREATE USER

×

×

×

×

×

-

ALTER USER...

×

×

×

×

×

-

DROP USER...

×

×

×

×

×

-

SHOW USERS

×

×

×

×

×

-

GRANT...

×

×

×

×

×

-

REVOKE...

×

×

×

×

×

-

SHOW PRIVILEGES...

×

×

×

×

×

-

ALTER SYSTEM...

×

×

×

×

×

×

-

SHOW PARAMETER...

×

×

×

×

×

×

-

访问OpenTSDB兼容API所需的权限

调用HTTP API时需要用户具备GLOBAL权限。

各个API所需的权限可参见下表。

说明

下表中○表示需要的权限,×表示不需要的权限。

API种类

GLOBAL WRITE

GLOBAL READ

GLOBAL ADMIN

/api/put

×

×

/api/query

×

×

/api/query/last

×

×

/api/mput

×

×

/api/mquery

×

×

/api/query/mlast

×

×

/api/suggest

×

×

/api/dump_meta

×

×

/api/search/lookup

×

×

/api/ttl

×

×

/api/truncate

×

×