账户管理报表
IoTDB可以为用户提供账号权限管理操作,保障数据安全。接下来我将通过以下具体示例向朋友们展示基本的用户权限管理操作,介绍详细的 SQL 语法和用法详细信息。
基本概念
用户
用户是数据库的合法用户。用户对应于唯一的用户名,并具有密码作为身份验证方式。在使用数据库之前,一个人必须首先提供合法的用户名和密码才能使自己成为用户。
特权
数据库提供了多种操作,并非所有用户都可以执行所有操作。如果用户可以执行操作,则称该用户具有执行该操作的权限。权限可分为数据管理权限(如添加、删除和修改数据)和权限管理权限(如创建和删除用户和角色、授予和撤销权限等)。数据管理权限通常需要一个路径来限制其有效范围,该路径是根植于路径相应节点的子树。
角色
角色是一组特权,具有唯一的角色名称作为标识符。一个用户通常对应于一个真实身份(例如流量调度员),而一个真实身份可能对应于多个用户。这些具有相同真实身份的用户往往具有相同的权限。角色是可以统一管理此类特权的抽象。
默认用户
初始安装后,IoTDB 中有一个默认用户:root,默认密码为 root。此用户是管理员用户,无法删除并具有所有权限。既不能向 root 用户授予新权限,也不能删除 root 用户拥有的权限。
权限管理操作示例
根据,IoTDB的样本数据可能属于不同的发电组,如ln、sgcc等。不同的发电组不希望其他人获取自己的数据库数据,因此我们需要在组层隔离数据权限。
创建用户
我们可以为 ln 和 sgcc 组创建两个用户,分别名为 ln_write_user 和 sgcc_write_user,两个密码都是write_pwd。SQL 语句为:
CREATE USER ln_write_user 'write_pwd'
CREATE USER sgcc_write_user 'write_pwd'
然后使用以下 SQL 语句向用户显示:
LIST USER
从下面显示的结果可以看出,已创建两个用户:
授予用户权限
此时,虽然已经创建了两个用户,但他们没有任何权限,因此他们无法对数据库进行操作。例如,我们使用ln_write_user在数据库中写入数据,SQL 语句为:
INSERT INTO root.ln.wf01.wt01(timestamp,status) values(1509465600000,true)
SQL 语句将不会执行,相应的错误提示如下:
现在,我们授予两个用户对相应存储组的写入权限,并尝试再次写入数据。SQL 语句为:
GRANT USER ln_write_user PRIVILEGES 'INSERT_TIMESERIES' on root.ln
GRANT USER sgcc_write_user PRIVILEGES 'INSERT_TIMESERIES' on root.sgcc
INSERT INTO root.ln.wf01.wt01(timestamp, status) values(1509465600000, true)
执行结果如下:
其他说明
用户、特权和角色之间的关系
角色是一组特权,特权和角色都是用户的属性。也就是说,一个角色可以有多个权限,一个用户可以有多个角色和特权(称为用户自己的特权)。
目前,IoTDB中不存在冲突的权限,因此用户的真正权限是用户自身权限和用户角色权限的结合。也就是说,要确定用户是否可以执行操作,取决于用户自己的权限之一或用户角色的权限是否允许该操作。用户自己的特权和用户角色的特权可能会重叠,但这并不重要。
需要注意的是,如果用户本身具有权限(对应于操作 A),并且其角色包含相同的权限,则仅从用户本身撤消权限并不能禁止用户执行操作 A,因为有必要从角色中撤消该权限,或者从用户中撤消该角色。同样,仅从用户角色撤消权限并不能禁止用户执行操作 A。
同时,对角色的更改会立即反映在拥有角色的所有用户上。例如,向角色添加某些权限将立即为拥有该角色的所有用户提供相应的权限,删除某些权限也会剥夺相应用户的权限(除非用户本身具有这些权限)。
系统中包含的特权列表
**系统中包含的特权列表**
特权名称 | 解释 |
SET_STORAGE_GROUP | 创建时间序列;设置存储组;路径相关 |
INSERT_TIMESERIES | 插入数据;路径相关 |
UPDATE_TIMESERIES | 更新数据;路径相关 |
READ_TIMESERIES | 查询数据;路径相关 |
DELETE_TIMESERIES | 删除数据或时间序列;路径相关 |
CREATE_USER | 创建用户;路径独立 |
DELETE_USER | 删除用户;路径独立 |
MODIFY_PASSWORD | 修改所有用户的密码;路径独立 |
LIST_USER | 列出所有用户;列出用户的权限;列出具有三种操作权限的用户角色;路径独立 |
GRANT_USER_PRIVILEGE | 授予用户权限;路径独立 |
REVOKE_USER_PRIVILEGE | 撤销用户权限;路径独立 |
GRANT_USER_ROLE | 授予用户角色;路径独立 |
REVOKE_USER_ROLE | 撤销用户角色;路径独立 |
CREATE_ROLE | 创建角色;路径独立 |
DELETE_ROLE | 删除角色;路径独立 |
LIST_ROLE | 列出所有角色;列出角色的权限;列出所有拥有角色的用户的三种操作权限;路径独立 |
GRANT_ROLE_PRIVILEGE | 授予角色权限;路径独立 |
REVOKE_ROLE_PRIVILEGE | 撤销角色特权;路径独立 |
用户名限制
IoTDB指定用户名的字符长度不能小于4,并且用户名不能包含空格。
密码限制
IoTDB指定密码的字符长度不能小于4,并且密码不能包含空格。密码使用 MD5 加密。
角色名称限制
IoTDB指定角色名称的字符长度不能小于4,并且角色名称不能包含空格。