访问控制

GDS 目录为管理员用户提供高级访问权限。任何被授予名为 admin 的角色的用户都被 GDS 视为管理员。

GDS 管理员可以访问任何其他用户投影的图。这包括列出、删除和在这些图上运行算法的能力。

消除名称相同的图的歧义

有时,多个用户(包括管理员用户本身)可能拥有名称相同的图。为了消除这些图之间的歧义,可以使用 username 配置参数。

示例

我们将使用一个小型示例来演示管理员功能。在本示例中,我们有三个用户,其中一个用户是管理员。我们使用以下 Cypher 命令创建用户并设置角色

CREATE USER alice SET PASSWORD $alice_pw CHANGE NOT REQUIRED;
CREATE USER bob SET PASSWORD $bob_pw CHANGE NOT REQUIRED;
CREATE USER carol SET PASSWORD $carol_pw CHANGE NOT REQUIRED;

GRANT ROLE reader TO alice;
GRANT ROLE reader TO bob;
GRANT ROLE admin TO carol;

正如我们所见,alicebob 是具有数据库读取权限的标准用户。carol 是管理员,因为他们被授予了 admin 角色(有关此角色的更多信息,请参阅 操作手册)。

现在,alicebob 都投影了一些图。他们都投影了一个名为 graphA 的图,而 bob 还投影了一个名为 graphB 的图。

列出

要列出所有用户的全部图,carol 只要使用图列表过程即可。

以管理员用户身份列出所有图
CALL gds.graph.list()
YIELD graphName
表 1. 结果
graphName

"graphA"

"graphA"

"graphB"

请注意,由于 carol 被视为 GDS 管理员,因此所有用户的全部图都对他们可见。

使用其他用户的图运行算法

carol 可以直接使用 graphB

carol 可以在 bob 拥有的 graphB 图上运行 WCC
CALL gds.wcc.stats('graphB')
YIELD componentCount

要使用 alice 拥有的 graphAcarol 必须使用 username 覆盖。

carol 可以在 alice 拥有的 graphA 图上运行 WCC
CALL gds.wcc.stats('graphA', { username: 'alice' })
YIELD componentCount

删除其他用户的图

与列表不同,当使用username覆盖来消除歧义时,必须使用完整的过程签名。在下面的查询中,我们使用了删除过程的第二个和第三个参数的默认值。username是第四个参数。有关更多详细信息,请参见删除图.

要删除bob拥有的graphAcarol可以运行以下命令
CALL gds.graph.drop('graphA', true, '', 'bob')
YIELD graphName