内置角色权限¶
所谓角色,就是一组相关权限的集合。用户可以把角色分配给创建的用户,从而实现访问控制。
内置角色¶
NebulaGraph 内置了多种角色,说明如下:
-
God
- 初始最高权限角色,拥有所有操作的权限。类似于 Linux 中的
root
和 Windows 中的administrator
。
-
Meta 服务初始化时,会自动创建 God 角色用户
root
,密码为nebula
。注意
请及时修改
root
用户的密码,保证数据安全。
-
在
nebula-graphd.conf
文件中(默认目录为/usr/local/nebula/etc/
),当--enable_authorize
为true
时:- 一个集群只能有一个 God 角色用户,该用户可以管理集群内所有图空间。
- 不支持手动授权 God 角色,只能使用默认 God 角色用户
root
。
- 初始最高权限角色,拥有所有操作的权限。类似于 Linux 中的
-
Admin
- 对权限内的图空间拥有 Schema 和 data 的读写权限。
-
可以将权限内的图空间授权给其他用户。
注意
只能授权低于 ADMIN 级别的角色给其他用户。
-
DBA
- 对权限内的图空间拥有 Schema 和 data 的读写权限。
- 无法将权限内的图空间授权给其他用户。
-
User
- 对权限内的图空间拥有 Schema 的只读权限。
- 对权限内的图空间拥有 data 的读写权限。
-
Guest
- 对权限内的图空间拥有 Schema 和 data 的只读权限。
-
Basic
- 对权限内的图空间拥有 Schema 的只读权限。
- (需额外授权)对权限内的图空间拥有 Tag 和 Edge Type 的读写权限。
Enterpriseonly
Basic 角色仅在企业版中提供。
Note
- 不支持自行创建角色,只能使用默认的内置角色。
- 一个用户在一个图空间内只能拥有一个角色权限。授权用户请参见用户管理。
角色权限¶
各角色的执行权限如下。
权限 | God | Admin | DBA | User | Guest | Basic(企业版) | 相关语句 |
---|---|---|---|---|---|---|---|
Read space | Y | Y | Y | Y | Y | Y | USE 、DESCRIBE SPACE |
Read schema | Y | Y | Y | Y | Y | Y | DESCRIBE TAG 、DESCRIBE EDGE 、DESCRIBE TAG INDEX 、DESCRIBE EDGE INDEX |
Write schema | Y | Y | Y | CREATE TAG 、ALTER TAG 、CREATE EDGE 、ALTER EDGE 、DROP TAG 、DELETE TAG 、DROP EDGE 、CREATE TAG INDEX 、CREATE EDGE INDEX 、DROP TAG INDEX 、DROP EDGE INDEX |
|||
Write user | Y | CREATE USER 、DROP USER 、ALTER USER |
|||||
Write role | Y | Y | GRANT 、REVOKE |
||||
Read data | Y | Y | Y | Y | Y | C | GO 、SET 、PIPE 、MATCH 、ASSIGNMENT 、LOOKUP 、YIELD 、ORDER BY 、FETCH VERTICES 、Find 、FETCH EDGES 、FIND PATH 、LIMIT 、GROUP BY 、RETURN |
Write data | Y | Y | Y | Y | C | INSERT VERTEX 、UPDATE VERTEX 、INSERT EDGE 、UPDATE EDGE 、DELETE VERTEX 、DELETE EDGES 、DELETE TAG |
|
Show operations | Y | Y | Y | Y | Y | Y | SHOW 、CHANGE PASSWORD |
Job | Y | Y | Y | Y | SUBMIT JOB COMPACT 、SUBMIT JOB FLUSH 、SUBMIT JOB STATS 、STOP JOB 、RECOVER JOB 、BUILD TAG INDEX 、BUILD EDGE INDEX 、INGEST 、DOWNLOAD |
||
Write space | Y | CREATE SPACE 、DROP SPACE 、CREATE SNAPSHOT 、DROP SNAPSHOT 、BALANCE 、CONFIG |
Enterpriseonly
当前仅企业版支持基于 Basic 角色的细粒度(Tag/Edge type 级别)权限管理。
Caution
Show operations 为特殊操作,只会在自身权限内执行。例如SHOW SPACES
,每个角色都可以执行,但是只会返回自身权限内的图空间。
只有 God 角色可以执行SHOW USERS
和SHOW SNAPSHOTS
语句。
Basic 角色(企业版)¶
语法¶
Caution
进入图空间后才可执行以下命令。
- 授予 Basic 用户 Tag/Edge 权限
GRANT { OPTION[,OPTION] } [ TAG { * | <tag>[,...] } | EDGE { * | <edge_type>[, ...] }] TO <user_name>;
OPTION = { READ | WRITE }
- 取消 Basic 用户 Tag/Edge 权限
REVOKE { OPTION[,OPTION] } [ TAG { * | <tag>[,...] } | EDGE { * | <edge_type>[, ...] }] TO <user_name>;
OPTION = { READ | WRITE }
- 查询用户权限
SHOW GRANTS [<user_name>]
注意事项¶
- 默认 Basic 角色无任何 Tag/Edge 读写权限。
- 只有 GOD 和 ADMIN 角色用户能执行授权(GRANT)和撤销权限(REVOKE)操作。
- 只允许用户在指定图空间对 Basic 角色进行授权(GRANT)和撤销权限(REVOKE)操作,不允许授权给其他角色用户。
- Basic 角色不允许插入无 Tag 的点。
- 执行 UPDATE 或 UPSERT 操作必须同时拥有读权限和写权限。
示例¶
# 创建 test 用户
nebula> CREATE USER test WITH PASSWORD 'nebula';
# 为 test 用户创建 Basic 角色权限
nebula> GRANT ROLE BASIC ON basketballplayer TO test;
# 选择图空间 basketballplayer
nebula> use basketballplayer;
# 授予 test 用户 Tag `player` 和 Edge Type `follow` 和 `serve` 的读写权限
# 授予用户指定 Tag/Edge 读写权限必须在指定图空间后
nebula> GRANT READ, WRITE TAG player EDGE follow, serve TO test;
# 查询 test 用户权限
nebula> > SHOW GRANTS test;
+--------+------------+---------------------+------------+---------------------+
| user | READ(TAG) | READ(EDGE) | WRITE(TAG) | WRITE(EDGE) |
+--------+------------+---------------------+------------+---------------------+
| "test" | ["player"] | ["follow", "serve"] | ["player"] | ["follow", "serve"] |
+--------+------------+---------------------+------------+---------------------+
# 取消 test 用户 所有 Edge Type 的读、写权限
nebula> REVOKE READ,WRITE EDGE * FROM test;
# 查询 test 用户权限
nebula> SHOW GRANTS test;
+--------+------------+------------+------------+-------------+
| user | READ(TAG) | READ(EDGE) | WRITE(TAG) | WRITE(EDGE) |
+--------+------------+------------+------------+-------------+
| "test" | ["player"] | [] | ["player"] | [] |
+--------+------------+------------+------------+-------------+
# Basic 角色用户读取无权限的数据时,将会出现以下报错
nebula> MATCH (v:player)-[:likex]-() RETURN v;
[ERROR (-1008)]: PermissionError: Edge `likex' does not exist or is not readable.
Caution
对于 Basic 角色用户,显式指定无读权限的 Tag/Edge Type 将报错,未显式指定无读权限的 Tag/Edge Type 不会报错。在遍历过程中,所有查询无法读取无权限的 Tag/Edge Type 及其上的属性。Edge Type 的读权限可控制边的扩展行为,在遍历过程中,如果 Edge Type 无权限,将不会进行拓展;Tag 的读权限不控制点的拓展行为,拓展过程中即使点上 Tag 无权限,仍可进行拓展。
最后更新:
September 4, 2023