Skip to main content

用户权限

用户权限

ArcGraph 的权限管理是基于 RBAC(Role-Based Access Control,基于角色的访问控制)方式进行扩展和优化来实现的。在 ArcGraph 中,用户权限管理由权限、角色、资源以及用户构成。

  • 权限(Privilege)定义了用户对资源的访问权限类型。
  • 资源(Resource)包括创建的 Graph,Vertex 以及 Edge 等。
  • 角色(Role)是权限的集合,定义对资源操作权限的集合。
  • 用户(User)通过角色来决定权限集合,从而决定自身对资源的访问边界。

注意:

  • 用户权限管理是系统安全的基础,请务必谨慎对待。
  • 当前,仅拥有 ADMIN 角色的用户具备执行用户、角色和权限管理操作的权限,详情请参考 角色 Role 章节。

权限 Privilege

ArcGraph 图数据库的权限设计如下图所示。其中,系统内置的超级管理员用户“ARCGRAPH”拥有“ADMIN”角色,具备对系统所有资源的所有操作权限。

权限设计图

详细介绍

权限描述支持语句
TRAVERSE允许拥有资源被发现(此处定义资源为 Graph,Vertex 以及 Edge 等)的权限。
- 执行以下语句需所有图的 TRAVERSE 权限
SET GLOBAL...
- 执行以下语句需所在图的 TRAVERSE 权限
SHOW VERTEX INDEXES...SHOW EDGE INDEXES...SHOW VERTEXES...SHOW EDGES...
- 执行以下语句需 _SYSTEM 图的 TRAVERSE 权限
SHOW GRAPH PARTITION...SHOW GRAPH PARTITION LEADER...
READ允许拥有读取资源的权限。
- 执行以下语句需所在图的 READ 权限
SHOW CURRENT GRAPH...SHOW GRAPHS...DESC GRAPH...SHOW VERTEXES...DESC VERTEX...SHOW EDGES...DESC EDGE...MATCH...PROFILE...
- 执行以下语句需 _SYSTEM 图的 READ 权限
SHOW ROLE PRIVILEGES...SHOW ROLES...SHOW USERS...SHOW USER ROLES...SHOW CURRENT USER...
CREATE允许拥有创建资源的权限。
- 执行以下语句需所在图的 CREATE 权限
CREATE GRAPH...USE...CREATE VERTEX...CREATE EDGE...CREATE TEMPORAL EDGE...
- 执行以下语句需 _SYSTEM 图的 CREATE 权限
CREATE USER...ALTER USER...CREATE ROLE...
DELETE允许拥有删除资源的权限。
- 执行以下语句需所在图的 DELETE 权限
TRUNCATE GRAPH...DROP GRAPH...DROP VERTEX...DROP EDGE...DELETE...
- 执行以下语句需 _SYSTEM 图的 DELETE 权限
DROP ROLE...
SET PROPERTY允许拥有在 Vertex 及 Edge 上设置属性的权限。
- 执行以下语句需所在图的 SET PROPERTY 权限
RENAME GRAPH...ALTER VERTEX...ALTER EDGE...INSERT...SET...
- 执行以下语句需 _SYSTEM 图的 SET PROPERTY 权限
GRANT ROLE...REVOKE ROLE...
ALL允许拥有所有权限。GRANT PRIVILEGES...REVOKE PRIVILEGES...ALTER CONFIG...KILL SESSION...ALTER SYSTEM...GRANT PRIVILEGES...REVOKE PRIVILEGES... 及其他 ArcGraph 支持的所有语句

说明:
自 ArcGraph v2.1.1 版本起对权限进行调整,删除了 MATCHMERGEWRITE 等权限,以简化权限体系并提高安全性。

查看权限

在 ArcGraph 图数据库中支持使用 SHOW ROLE PRIVILEGES 及相关语句查看权限相关信息,详情请参见 SHOW PRIVILEGES 章节。

角色 Role

角色是 ArcGraph 图数据库中权限管理的核心概念,代表着一组相关权限的集合。根据实际情况可以将角色分配给用户,以实现精细化的权限控制。一个用户可以同时拥有多个角色,另外一个角色也可以被绑定到多个用户上。

系统默认有以下两种内置角色:

  • ADMIN 角色
    ArcGraph 图数据库内置了“ADMIN”角色,该角色拥有对系统所有资源的所有操作权限。

    SHOW ROLE PRIVILEGES LIKE 'ADMIN';

    返回结果示例如下:

    +-----------+----------------+-----------------+------------+-------------+-----------+---------------+
    | role_name | privilege_type | privilege Level | graph_name | vertex_name | edge_name | property_name |
    +===========+================+=================+============+=============+===========+===============+
    | ADMIN | All | ALL | * | * | * | * |
    +-----------+----------------+-----------------+------------+-------------+-----------+---------------+
  • 用户默认角色(User Default Role)

    针对用户自身创建的资源,用户需要具备所有(ALL)的操作权限,并与其他用户相互隔离。因此自 ArcGraph v2.1.1 版本起,在创建新用户时,系统将自动为该用户生成与之一一对应的默认角色(命名为 _DEFAULT_ROLE_<USER_NAME>,初始无权限),并自动绑定至该用户。

    当用户新建资源时(如 CREATE GRAPH ...),对应的权限集合(Privilege Package)将自动绑定至对应的用户默认角色上,无需进行额外的授权操作。

    为确保系统运行的稳定性和安全性,我们对默认角色设定了以下安全操作策略:

    • DROP ROLE:禁止删除用户默认角色。在特殊情况下,可使用 FORCE 选项强制执行,但请务必谨慎,避免对系统造成潜在风险。
    • RENAME ROLE:禁止重命名用户默认角色,以维护角色名称的一致性和管理便捷性。
    • CREATE ROLE:禁止创建以 _DEFAULT_ROLE_ 为前缀的角色,该前缀为系统保留使用。若确实需要,可使用 FORCE 选项强制执行,请谨慎操作。
    • GRANT ROLE:默认角色支持进行权限管理操作,如有需要可根据实际业务需求对默认角色赋予或回收权限,以确保用户能够访问和操作所需的资源。有关权限的详细说明,详情请参见 权限 章节。

前提条件

在开始操作前,请确保当前登录用户拥有执行此操作所需权限的角色。有关权限的详细说明,详情请参见 权限 章节。

创建角色

使用 CREATE ROLE 语句创建角色。

语法

CREATE ROLE <role_name> [IF NOT EXISTS];

详细说明

创建角色 role_name

示例

CREATE ROLE role1;

赋予/撤销权限

为角色赋予权限

语法

GRANT <privilege_type> ON GRAPH <graph_name> TO <role_name>;
GRANT <privilege_type> ON GRAPH <graph_name> VERTEX <vertex_name> TO <role_name>;
GRANT <privilege_type> ON GRAPH <graph_name> EDGE <edge_name> TO <role_name>;
GRANT <privilege_type> ON GRAPH <graph_name> VERTEX <vertex_name> PROPERTY <property_name> TO <role_name>;
GRANT <privilege_type> ON GRAPH <graph_name> EDGE <edge_name> PROPERTY <property_name> TO <role_name>;

详细说明

  • <privilege_type>:权限标记,例如 TRAVERSEREADCREATEDELETESET PROPERTYALL 等。
  • <graph_name>: 图名称。
  • <vertex_name>: 点类型名称,该点类型应存在于 <graph_name> 中。
  • <edge_name>: 边类型名称,该边类型应存在于 <graph_name> 中。
  • <property_name>: 属性名称,该属性类型应存在于 <vertex_name><edge_name> 中。
  • <role_name>:将赋予 <PrivilegeType> 权限的角色名称。

示例 1
使“role1”在所有图上拥有 CREATE 权限。

GRANT CREATE ON GRAPH ALL TO role1;

示例 2
使“role1”在图“g1”上拥有 DELETE 权限。

GRANT DELETE ON GRAPH g1 TO role1;

示例 3
使“role1”在图“g1”中的点“person”上拥有 TRAVERSE 权限。

GRANT TRAVERSE ON GRAPH g1 VERTEX person TO role1;

示例 4
使“role1”在图“g1”中的边“knows”上拥有 TRAVERSE 权限。

GRANT TRAVERSE ON GRAPH g1 EDGE knows TO role1;

示例 5
使“role1”在图“g1”中的点“person”上的属性 name 拥有 TRAVERSE 权限。

GRANT TRAVERSE ON GRAPH g1 VERTEX person PROPERTY name TO role1;

为角色撤销权限

语法

REVOKE <privilege_type> ON GRAPH <graph_name> FROM <role_name>;
REVOKE <privilege_type> ON GRAPH <graph_name> VERTEX <vertex_name> FROM <role_name>;
REVOKE <privilege_type> ON GRAPH <graph_name> EDGE <edge_name> FROM <role_name>;
REVOKE <privilege_type> ON GRAPH <graph_name> VERTEX <vertex_name> PROPERTY <property_name> FROM <role_name>;
REVOKE <privilege_type> ON GRAPH <graph_name> EDGE <edge_name> PROPERTY <property_name> FROM <role_name>;

详细说明

  • <privilege_type>:权限标记,例如 TRAVERSEREADCREATEDELETESET PROPERTYALL 等。
  • <graph_name>: 图名称。
  • <vertex_name>: 点类型名称,该点类型应存在于 <graph_name> 中。
  • <edge_name>: 边类型名称,该边类型应存在于 <graph_name> 中。
  • <property_name>: 属性名称,该属性类型应存在于 <vertex_name><edge_name> 中。
  • <role_name>:将撤销 <PrivilegeType> 权限的角色名称。

示例 1
撤销曾赋予“role1”在所有图上的 CREATE 权限。

REVOKE CREATE ON GRAPH ALL FROM role1;

示例 2
撤销曾赋予“role1”在图“g1”上拥有 DELETE 权限。

REVOKE DELETE ON GRAPH g1 FROM role1;

示例 3
撤销曾赋予“role1”在图“g1”中的点“person”上拥有 TRAVERSE 权限。

REVOKE TRAVERSE ON GRAPH g1 VERTEX person FROM role1;

示例 4
撤销曾赋予“role1”在图“g1”中的边“knows”上拥有 TRAVERSE 权限。

REVOKE TRAVERSE ON GRAPH g1 EDGE knows FROM role1;

示例 5
撤销曾赋予“role1”在图“g1”中的点“person”上的属性 name 拥有 TRAVERSE 权限。

REVOKE TRAVERSE ON GRAPH g1 VERTEX person PROPERTY name FROM role1;

查看角色

在 ArcGraph 图数据库中支持使用 SHOW ROLES 及相关语句查看角色相关信息,详情请参见 SHOW ROLES 章节。

删除角色

语法

DROP ROLE <role_name> [IF EXISTS];

详细说明

删除角色 role_name

示例

DROP ROLE role1;

用户 User

在 ArcGraph 图数据库中,用户需要提供正确的用户名和密码来登录系统,并且登录后的操作将受到其所拥有的角色和权限限制。 系统默认创建一个超级管理员用户“ARCGRAPH”,该用户拥有“ADMIN”角色,具备对系统所有资源的所有操作权限,以执行各种管理任务。

前提条件

在开始操作前,请确保当前登录用户拥有执行此操作所需权限的角色。有关权限的详细说明,详情请参见 权限 章节。

创建用户

支持使用 CREATE USER 语句创建新用户。请注意,自 ArcGraph v2.1.1 版本起,在创建新用户时系统自动为该用户生成一个与之对应的默认角色(命名为 _DEFAULT_ROLE_<USER_NAME>,初始权限为空),并自动将这个角色绑定至该用户,详情请参见 角色 章节。

语法

CREATE USER <user_name> SET PASSWORD '<password>';

详细说明

参数说明
<user_name>设置用户的名称,命名大小写不敏感,小写字母将自动转换为大写显示,例如“user1”和“USER1”代表同一用户。用户名命名规则详情请参见 命名规则 章节。
<password>设置用户的密码。

示例
登录系统后,创建用户名为“user1”,密码为“123456”的用户,命令如下:

CREATE USER user1 SET PASSWORD "123456";

修改用户密码

在 ArcGraph 图数据库中,用户通过提供正确的用户名和密码来访问系统。为提高图数据库的安全性,建议定期更换密码,并设置复杂度较高的新密码,密码复杂度要求详情请参见 密码复杂度校验 章节。
用户修改密码后,当前已登录的会话不会中断或退出。新密码仅对后续新建会话或登录请求生效。

语法

ALTER USER <user_name> SET PASSWORD "<newpassword>";

详细说明

参数说明
<user_name>用于指定将要修改密码的用户的名称。请确保指定正确的用户名,以便将操作应用于正确的对象上。
说明:
命名大小写不敏感,小写字母将自动转换为大写显示,例如“user1”和“USER1”代表同一用户。
<newpassword>修改后的新密码。

示例
登录系统后,将“user1”用户的密码修改为“Abcdef2”,命令如下:

ALTER USER user1 SET PASSWORD "Abcdef2";

修改普通用户密码

  • 修改密码
    普通用户可以使用自己的用户名和密码登录系统后,执行 ALTER USER 语句来修改密码。

  • 忘记密码
    若普通用户忘记了登录密码,需要联系超级管理员用户来重置密码。超级管理员登录系统后,可执行 ALTER USER 语句来修改该用户的密码。

修改超级用户密码

ArcGraph 的超级管理员用户(如 arcgraph)初始密码为“arcgraph”,为保证系统安全,在集群部署完毕后,请务必修改此初始密码。

  • 修改密码
    超级管理员用户可以使用自己的用户名和密码登录系统后,执行 ALTER USER 语句来修改密码。支持本地或远程登录执行此操作。

  • 忘记密码
    若超级管理员用户忘记了登录密码,需通过本地地址(127.0.0.1:xxxlocalhost)并设置 --no-auth 参数(或在 client_config.toml 中设置 no_auth=true),以无密码的方式登录系统。成功登录后,执行 ALTER USER 语句来设置新密码。
    说明:

    • 请确保客户端支持 --no-auth 参数。
    • 修改密码完成后,请立即撤销无验证访问权限以保障系统安全。

请注意,仅 ArcGraph >= v2.1.1 版本支持此功能。

分配/移除角色

为用户分配角色

语法

GRANT ROLE <role_name> TO <user_name>;

详细说明
为用户 user_name 分配角色 role_name

示例

GRANT ROLE role1 TO user1;

为用户移除角色

语法

REVOKE ROLE <role_name> FROM <user_name>;

详细说明
从用户 user_name 上移除角色 role_name

示例

REVOKE ROLE role1 FROM user1;

查看用户

在 ArcGraph 图数据库中支持使用 SHOW USERS 及相关语句查看用户相关信息,详情请参见 SHOW USERS 章节。

删除用户

使用 DROP USER 语句删除用户时,系统将自动同步删除与其绑定的默认角色。而该用户所拥有的其他非默认角色将保持原状,不会受到此次删除操作的影响,它们将继续存在于系统中。用户一旦删除将无法恢复,因此请谨慎操作。建议在删除用户之前,提前清理其创建的图资源,以免遗留不必要的数据。

语法

DROP USER <user_name>;

详细说明

参数说明
<user_name>用于指定将要删除的用户的名称。请确保指定正确的用户名,以便将操作应用于正确的对象上。
说明:
命名大小写不敏感,小写字母将自动转换为大写显示,例如“user1”和“USER1”代表同一用户。

示例
删除用户“user1”,命令如下:

DROP USER user1;