访问控制
GDS 目录为管理员用户提供了提升的访问权限。任何被授予名为 admin 角色的用户,均被 GDS 视为管理员。
GDS 管理员有权访问由任何其他用户投影(project)的图。这包括列出、删除这些图以及在这些图上运行算法的能力。
示例
我们将通过一个小示例来说明管理员的功能。在此示例中,我们有三个用户,其中一个是管理员。我们使用以下 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;
正如我们所见,alice 和 bob 是对数据库具有读取权限的标准用户。carol 因为被授予了 admin 角色而成为管理员(有关此角色的更多信息,请参阅操作手册)。
现在 alice 和 bob 各自投影了一些图。他们都投影了一个名为 graphA 的图,且 bob 还额外投影了一个名为 graphB 的图。
列出图
要列出所有用户的所有图,carol 只需使用图列表过程(graph list procedure)即可。
以管理员身份列出所有图
CALL gds.graph.list()
YIELD graphName
| graphName |
|---|
"graphA" |
"graphA" |
"graphB" |
请注意,由于 carol 被视为 GDS 管理员,因此所有用户的所有图对她均可见。
使用其他用户的图运行算法
carol 只需直接指定名称即可使用 graphB。
carol 可以在 bob 拥有的 graphB 图上运行 WCC 算法CALL gds.wcc.stats('graphB')
YIELD componentCount
要使用 alice 拥有的 graphA,carol 必须使用 username 覆盖参数。
carol 可以在 alice 拥有的 graphA 上运行 WCC 算法CALL gds.wcc.stats('graphA', { username: 'alice' })
YIELD componentCount
删除其他用户的图
与列出图不同,当使用 username 覆盖参数进行区分时,必须使用完整的存储过程签名。在下面的查询中,我们为删除过程(drop procedure)的第二个和第三个参数使用了默认值。username 是第四个参数。有关更多详细信息,请参阅删除图。
要删除
bob 拥有的 graphA,carol 可以运行以下命令CALL gds.graph.drop('graphA', true, '', 'bob')
YIELD graphName