基于角色的访问控制

基于角色的访问控制 (RBAC) 是一种通过将用户分配到具有特定权限集来限制授权用户访问的方法。权限使用组合的允许列表/拒绝列表机制控制对图元素的访问权限。可以授予或拒绝访问权限,或结合使用这两种方式。如果用户具有与该资源相关的 GRANT(允许列表)且没有 DENY(拒绝列表),则他们将能够访问该资源。GRANTDENY 的所有其他组合将导致匹配路径不可访问。这在实践中意味着什么取决于我们谈论的是读取权限还是写入权限

  • 如果实体因读取权限而不可访问,数据将变得不可见。对于用户来说,就好像他们拥有一个更小的数据库(更小的图)一样。

  • 如果实体因写入权限而不可访问,则在任何尝试写入该数据时都会发生错误。

在本文件中,我们经常会以看似相同的方式使用术语“允许 (allows)”和“启用 (enables)”。然而,它们之间存在细微差别。我们将使用“启用 (enables)”来指代读取权限的后果,即限制不会导致错误,只会导致表观图大小的减小。我们将使用“允许 (allows)”来指代写入权限的后果,即限制可能导致错误。

如果用户未被授予数据库 ACCESS 权限,则将拒绝访问整个数据库。有关数据库访问权限的信息可在ACCESS 权限中找到。

有关语法描述的更多详细信息,请参阅数据库管理命令语法

图权限命令

管理员可以使用 Cypher 命令 GRANTDENYREVOKE 来管理 Neo4j 图管理权限。这些命令可用于向角色授予或拒绝权限,以及撤销先前授予或拒绝的权限。权限可以在整个图或图内的特定元素上授予或拒绝。权限也可以设置为不可变,这意味着除非禁用身份验证,否则无法授予、拒绝或撤销它们。

图权限命令的组成部分

图权限命令的组成部分包括

  • 命令:

    • GRANT – 授予角色权限。

    • DENY – 拒绝角色权限。

    • REVOKE – 从角色中移除已授予或拒绝的权限。

  • 可变性:

    • 执行 GRANTDENY 时可选择指定 IMMUTABLE,以表明除非禁用身份验证,否则该权限不能随后被移除。要授予或拒绝不可变权限,也必须禁用身份验证。相反,当 IMMUTABLEREVOKE 命令一起指定时,它将充当过滤器,并且只移除匹配的不可变权限。不可变权限也可以与不可变角色一起使用。更多信息请参阅不可变角色和权限

  • 图权限:

  • 名称:

    • 与权限关联的图。由于在 Neo4j 2025.05 中,每个数据库只能有一个图,因此此命令使用数据库名称或别名来引用该图。当使用别名时,命令将在解析的图上执行。

      如果删除一个数据库并创建一个同名的新数据库,新数据库将具有先前分配给已删除图的权限。

    • 可以是 *,表示所有图。此命令执行后创建的图也将与这些权限关联。

    • HOME GRAPH 指的是与该用户的“主数据库 (home database)”关联的图。如果用户没有配置主数据库,则将使用默认数据库作为主数据库。如果用户的主数据库在创建权限后因任何原因发生更改,则这些权限将与附加到新数据库的图关联。这非常强大,因为它允许通过简单地更改用户的主数据库来将权限从一个图切换到另一个图。

  • 实体

    • 此权限适用于的图元素

      • NODES 标签 (具有指定标签的节点)。

      • RELATIONSHIPS 类型 (特定类型的关系)。

      • ELEMENTS 标签 (节点和关系)。

      • FOR 模式 (匹配模式的节点)。详情请参阅基于属性的访问控制

    • 标签或类型可以使用 * 来指代,表示所有标签或类型。

    • 可以指定多个标签或类型,以逗号分隔。

    • 如果省略,默认为 ELEMENTS *

    • 某些写入权限命令不允许实体部分。详情请参阅写入权限

    • 写入权限不支持 FOR 模式实体。

  • 角色[, …​]

    • 要与权限关联的一个或多个角色,以逗号分隔。

图权限命令的通用语法

表 1. 通用 grant ON GRAPH 权限语法

命令

GRANT ... ON ... TO ...

语法

GRANT [IMMUTABLE] graph-privilege ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } } [entity] TO role[, ...]

描述

授予一个或多个角色权限。

表 2. 通用 deny ON GRAPH 权限语法

命令

DENY ... ON ... TO ...

语法

DENY [IMMUTABLE] graph-privilege ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } } [entity] TO role[, ...]

描述

拒绝一个或多个角色权限。

表 3. 通用 revoke ON GRAPH 权限语法

命令

REVOKE GRANT ... ON ... FROM ...

语法

REVOKE [IMMUTABLE] GRANT graph-privilege ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } } [entity] FROM role[, ...]

描述

从一个或多个角色中撤销已授予的权限。

表 4. 通用 revoke ON GRAPH 权限语法

命令

REVOKE DENY ... ON ... FROM ...

语法

REVOKE [IMMUTABLE] DENY graph-privilege ON { HOME GRAPH | GRAPH[S] {* | name[, ...] } } [entity] FROM role[, ...]

描述

从一个或多个角色中撤销已拒绝的权限。

表 5. 通用 revoke ON GRAPH 权限语法

命令

REVOKE ... ON ... FROM ...

语法

REVOKE [IMMUTABLE] graph-privilege ON { HOME GRAPH | GRAPH[S] { * | name[, ...] } } [entity] FROM role[, ...]

描述

从一个或多个角色中撤销已授予或拒绝的权限。

DENY 不会删除已授予的权限;它们两者都存在。如果要移除权限,请使用 REVOKE

常见的错误,例如拼写错误或尝试撤销未授予或拒绝的权限,将导致通知。这些通知中的一些可能会在 Neo4j 的未来主要版本中被错误取代。有关通知的详细信息,请参阅状态码 → 通知码

以下图像展示了 GRANTDENY 的通用语法

privileges grant and deny syntax
图 1. GRANTDENY 语法

图权限的更详细语法示例如下

privileges on graph syntax
图 2. GRANTDENY 图权限的语法。{} 是语法的一部分,不用于分组。

下图显示了不同图权限之间的层级关系

privileges hierarchy
图 3. 图权限层级结构

列出支持的权限

可以使用 SHOW SUPPORTED PRIVILEGES 命令显示支持的权限。此命令列出了可在服务器上授予或拒绝的权限,以及权限的结构。

表 6. 显示支持权限命令语法

命令

SHOW SUPPORTED PRIVILEGES

语法

SHOW SUPPORTED PRIVILEGE[S]
  [YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]

描述

列出服务器支持的所有权限。

使用 RETURN 子句时,YIELD 子句是强制性的,不得省略。

结果将包含描述权限的多个列

描述 类型

操作

权限操作。

STRING

限定符

用于进一步限制权限目标的限定符(functionlabelprocedurepropertysettingusername),如果不需要则为 null。

STRING

目标

权限目标:dbmsdatabasegraphcidrall data

STRING

范围

权限可能范围的列表(elementsnodespatternrelationships),如果不需要则为 null。

STRING 列表

描述

权限的简短描述。

STRING

如果权限列出了限定符,则必须在命令中使用标识符或 *(如果它应影响所有标识符)。下表演示了限定符的使用方式

限定符 示例

函数

... EXECUTE FUNCTION `abc*` ON …​

标签

... SET LABEL `A` ON …​

过程

... EXECUTE BOOSTED PROCEDURE `apoc.*` ON …​

属性

... READ {`property`} ON …​

设置

... SHOW SETTINGS `dbms.*` ON …​

用户名

... IMPERSONATE (`username`) ON …​

指定权限的范围是可选的。如果未指定,默认范围将是 ELEMENTS *。请注意,并非所有权限都具有范围。

列出支持权限的示例

SHOW SUPPORTED PRIVILEGES YIELD * ORDER BY action DESC LIMIT 10 RETURN action, qualifier, target, scope, description

列出 10 个受支持的权限

表 7. 结果
操作 限定符 目标 范围 描述

"写入"

NULL

"图"

NULL

"允许在整个图上进行所有 WRITE 操作"

"用户管理"

NULL

"dbms"

NULL

"使指定角色能够创建、删除、修改和列出用户"

"遍历"

NULL

"图"

["elements", "nodes", "pattern", "relationships"]

"使指定的实体可被找到"

"事务管理"

"username"

"数据库"

NULL

"允许列出和结束指定用户在指定数据库上的事务和查询"

"终止事务"

"username"

"数据库"

NULL

"允许结束指定用户在指定数据库上的事务和查询"

"停止"

NULL

"数据库"

NULL

"允许停止指定数据库"

"启动"

NULL

"数据库"

NULL

"允许启动指定数据库"

"显示用户"

NULL

"dbms"

NULL

"使指定角色能够列出用户"

"显示事务"

"username"

"数据库"

NULL

"允许列出指定用户在指定数据库上的事务和查询"

"显示设置"

"setting"

"dbms"

NULL

"使指定角色能够查询给定的配置设置"

行数:10

列出已分配的权限

可以使用以下 SHOW PRIVILEGE[S] 命令显示已授予或拒绝给角色的权限。

表 8. 显示权限命令语法

命令

SHOW PRIVILEGE

语法

SHOW [ALL] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  [YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]

描述

列出所有已授予或拒绝的权限。

表 9. 显示角色权限语法

命令

SHOW ROLE ... PRIVILEGE

语法

SHOW ROLE[S] name[, ...] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  [YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]

描述

列出授予或拒绝给特定角色的权限。

表 10. 显示用户权限语法

命令

SHOW USER ... PRIVILEGE

语法

SHOW USER[S] [name[, ...]] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  [YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]

描述

列出特定用户或当前用户的权限。

[注意] ==== 请注意,用户只能显示他们自己的权限。因此,如果正在使用非原生认证提供商(如 LDAP),SHOW USER PRIVILEGES 将只能在有限范围内工作。使用非原生认证提供商时,无法列出其他用户的权限。 ====

当使用非原生身份验证提供商时,无法列出其他用户的权限。 ====

使用 RETURN 子句时,YIELD 子句是强制性的,不得省略。

为了方便概览现有权限,建议使用 SHOW 命令的 AS COMMANDS 版本,它返回两列。

表 11. SHOW PRIVILEGES AS COMMANDS 输出
描述 类型

命令

作为被授予或拒绝的命令的权限。或者在 AS REVOKE COMMANDS 的情况下,用于撤销权限的命令。默认输出

STRING

不可变

权限是否不可变。

BOOLEAN

或者,您可以省略 AS COMMANDS 子句,并获取在多列中返回的权限的完整详细信息。默认情况下,所有权限都会返回,无需 YIELD

表 12. SHOW PRIVILEGES 输出
描述 类型

访问

权限是授予还是拒绝。

STRING

操作

权限类型。例如,遍历、读取、索引管理或角色管理。

STRING

资源

权限范围。例如,整个 DBMS、特定数据库、图或子图访问。

STRING

权限适用的特定数据库或图。

STRING

权限适用的标签、关系类型、模式、过程、函数、事务或设置(如果适用)。

STRING

角色

权限被授予的角色。

STRING

不可变

权限是否不可变。

BOOLEAN

用户

请注意,这仅针对 SHOW USER [username] PRIVILEGES 返回。

列出所有权限的示例

STRING

可以使用不同的 SHOW PRIVILEGE[S] 命令显示已分配的权限。

列出所有角色的所有权限

SHOW [ALL] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  [WHERE expression]

SHOW [ALL] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
SHOW PRIVILEGES

表 13. 结果

"已授予"
访问 操作 资源 角色 不可变

"执行"

"FUNCTION(*)"

"数据库"

"*"

"PUBLIC"

false

"PROCEDURE(*)"

"执行"

"FUNCTION(*)"

"数据库"

"*"

"访问"

false

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"匹配"

"数据库"

false

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"admin"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"写入"

"图"

"*"

"admin"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"事务管理"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"写入"

"图"

"*"

"事务管理"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"USER(*)"

"数据库"

"*"

"约束"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"*"

"数据库"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"dbms_actions"

"数据库"

"*"

"数据库"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"索引"

"数据库"

"*"

"数据库"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"启动数据库"

"数据库"

"*"

"数据库"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"停止数据库"

"数据库"

"*"

"数据库"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"令牌"

"数据库"

"*"

"数据库"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"architect"

"数据库"

"*"

"数据库"

"RELATIONSHIP(*)"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"admin"

"editor"

"PROCEDURE(*)"

"执行"

"写入"

"图"

"*"

"admin"

"editor"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"事务管理"

"editor"

"PROCEDURE(*)"

"执行"

"写入"

"图"

"*"

"事务管理"

"editor"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"*"

"数据库"

"editor"

"PROCEDURE(*)"

"执行"

"dbms_actions"

"数据库"

"*"

"数据库"

"editor"

"PROCEDURE(*)"

"执行"

"启动数据库"

"数据库"

"*"

"数据库"

"editor"

"PROCEDURE(*)"

"执行"

"architect"

"数据库"

"*"

"数据库"

"editor"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"admin"

"已拒绝"

"PROCEDURE(*)"

"执行"

"写入"

"图"

"*"

"admin"

"已拒绝"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"事务管理"

"已拒绝"

"PROCEDURE(*)"

"执行"

"写入"

"图"

"*"

"事务管理"

"已拒绝"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"*"

"数据库"

"已拒绝"

"PROCEDURE(*)"

"neo4j"

"DEFAULT"

"数据库"

"noAccessUsers"

"数据库"

"publisher"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"admin"

"reader"

"PROCEDURE(*)"

"执行"

"写入"

"图"

"*"

"admin"

"reader"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"事务管理"

"reader"

"PROCEDURE(*)"

"执行"

"写入"

"图"

"*"

"事务管理"

"reader"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"*"

"数据库"

"reader"

"PROCEDURE(*)"

"执行"

"architect"

"数据库"

"*"

"数据库"

"reader"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"admin"

"regularUsers"

"PROCEDURE(*)"

"执行"

"all_properties"

"NODE(*)"

"*"

"事务管理"

"regularUsers"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"*"

"数据库"

"regularUsers"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"noAccessUsers"

"数据库"

行数:39

"PROCEDURE(*)"

行数: 39

token 操作对应于 NAME MANAGEMENT 权限。

也可以使用 YIELDORDER BYWHERE 过滤和排序结果

SHOW PRIVILEGES YIELD role, access, action, segment
ORDER BY action
WHERE role = 'admin'

在此示例中

  • 返回的列数已通过 YIELD 子句减少。

  • 返回列的顺序已更改。

  • 结果已使用 WHERE 子句过滤,仅返回 admin 角色。

  • 结果使用 ORDER BYaction 列排序。

SKIPLIMIT 也可用于结果分页。

表 14. 结果
角色 访问 操作

"RELATIONSHIP(*)"

"执行"

"DEFAULT"

"数据库"

"RELATIONSHIP(*)"

"执行"

"dbms_actions"

"数据库"

"RELATIONSHIP(*)"

"执行"

"索引"

"数据库"

"RELATIONSHIP(*)"

"执行"

"启动数据库"

"数据库"

"RELATIONSHIP(*)"

"执行"

"all_properties"

"admin"

"RELATIONSHIP(*)"

"执行"

"all_properties"

"事务管理"

"RELATIONSHIP(*)"

"执行"

"停止数据库"

"数据库"

"RELATIONSHIP(*)"

"执行"

"令牌"

"数据库"

"RELATIONSHIP(*)"

"执行"

"architect"

"数据库"

"RELATIONSHIP(*)"

"执行"

"USER(*)"

"约束"

"RELATIONSHIP(*)"

"执行"

"写入"

"admin"

"RELATIONSHIP(*)"

"执行"

"写入"

"事务管理"

行数:12

token 操作对应于 NAME MANAGEMENT 权限。

WHERE 也可以在没有 YIELD 的情况下使用

SHOW PRIVILEGES
WHERE graph <> '*'

在此示例中,WHERE 子句用于将权限过滤到仅针对特定图的权限。

表 15. 结果
访问 操作 资源 角色

"执行"

"DEFAULT"

"匹配"

"数据库"

false

"数据库"

"neo4j"

"DEFAULT"

"noAccessUsers"

"数据库"

"publisher"

"数据库"

"执行"

"DEFAULT"

"noAccessUsers"

"数据库"

行数:39

"数据库"

行数:3

RETURN 子句中的聚合可用于对权限进行分组。在此示例中,按用户以及 GRANTEDDENIED 进行分组。

SHOW PRIVILEGES YIELD * RETURN role, access, collect([graph, resource, segment, action]) AS privileges
表 16. 结果
角色 访问 权限

false

"执行"

[["*","database","FUNCTION(*)","execute"],["*","database","PROCEDURE(*)","execute"],["DEFAULT","database","database","access"]]

"RELATIONSHIP(*)"

"执行"

[["*","all_properties","NODE(*)","match"],["*","graph","NODE(*)","write"],["*","all_properties","RELATIONSHIP(*)","match"],["*","graph","RELATIONSHIP(*)","write"],["*","database","USER(*)","transaction_management"],["*","database","database","access"],["*","database","database","constraint"],["*","database","database","dbms_actions"],["*","database","database","index"],["*","database","database","start_database"],["*","database","database","stop_database"],["*","database","database","token"]]

"editor"

"执行"

[["*","all_properties","NODE(*)","match"],["*","graph","NODE(*)","write"],["*","all_properties","RELATIONSHIP(*)","match"],["*","graph","RELATIONSHIP(*)","write"],["*","database","database","access"],["*","database","database","constraint"],["*","database","database","index"],["*","database","database","token"]]

"已拒绝"

"执行"

[["*","all_properties","NODE(*)","match"],["*","graph","NODE(*)","write"],["*","all_properties","RELATIONSHIP(*)","match"],["*","graph","RELATIONSHIP(*)","write"],["*","database","database","access"]]

"publisher"

"neo4j"

[["neo4j","database","database","access"]]

"reader"

"执行"

[["*","all_properties","NODE(*)","match"],["*","graph","NODE(*)","write"],["*","all_properties","RELATIONSHIP(*)","match"],["*","graph","RELATIONSHIP(*)","write"],["*","database","database","access"],["*","database","database","token"]]

"regularUsers"

"执行"

[["*","all_properties","NODE(*)","match"],["*","all_properties","RELATIONSHIP(*)","match"],["*","database","database","access"]]

行数:39

"执行"

[["neo4j","database","database","access"]]

行数:8

token 操作对应于 NAME MANAGEMENT 权限。

RETURN 子句也可用于排序和分页结果,这与 YIELDWHERE 结合使用时非常有用。在此示例中,查询返回权限,每页显示五条,并跳过前五条以显示第二页。

SHOW PRIVILEGES YIELD * RETURN * ORDER BY role SKIP 5 LIMIT 5
表 17. 结果
访问 操作 资源 角色 不可变

"执行"

"all_properties"

"*"

"NODE(*)"

"RELATIONSHIP(*)"

"事务管理"

"PROCEDURE(*)"

"执行"

"写入"

"*"

"图"

"RELATIONSHIP(*)"

"事务管理"

"PROCEDURE(*)"

"执行"

"USER(*)"

"*"

"数据库"

"RELATIONSHIP(*)"

"约束"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"*"

"数据库"

"RELATIONSHIP(*)"

"数据库"

"PROCEDURE(*)"

"执行"

"dbms_actions"

"*"

"数据库"

"RELATIONSHIP(*)"

"数据库"

"PROCEDURE(*)"

行数:5

通过添加 AS COMMAND[S],也可以将可用权限显示为 Cypher 命令。

SHOW PRIVILEGES AS COMMANDS
表 18. 结果
命令

DENY ACCESS ON DATABASE `neo4j` TO `noAccessUsers`

GRANT ACCESS ON DATABASE * TO `admin`

GRANT ACCESS ON DATABASE * TO `architect`

GRANT ACCESS ON DATABASE * TO `editor`

GRANT ACCESS ON DATABASE * TO `publisher`

GRANT ACCESS ON DATABASE * TO `reader`

GRANT ACCESS ON DATABASE `neo4j` TO `regularUsers`

GRANT ACCESS ON HOME DATABASE TO `PUBLIC`

GRANT ALL DBMS PRIVILEGES ON DBMS TO `admin`

GRANT CONSTRAINT MANAGEMENT ON DATABASE * TO `admin`

GRANT CONSTRAINT MANAGEMENT ON DATABASE * TO `architect`

GRANT EXECUTE FUNCTION * ON DBMS TO `PUBLIC`

GRANT EXECUTE PROCEDURE * ON DBMS TO `PUBLIC`

GRANT INDEX MANAGEMENT ON DATABASE * TO `admin`

GRANT INDEX MANAGEMENT ON DATABASE * TO `architect`

GRANT MATCH {*} ON GRAPH * NODE * TO `admin`

GRANT MATCH {*} ON GRAPH * NODE * TO `architect`

GRANT MATCH {*} ON GRAPH * NODE * TO `editor`

GRANT MATCH {*} ON GRAPH * NODE * TO `publisher`

GRANT MATCH {*} ON GRAPH * NODE * TO `reader`

GRANT MATCH {*} ON GRAPH * RELATIONSHIP * TO `admin`

GRANT MATCH {*} ON GRAPH * RELATIONSHIP * TO `architect`

GRANT MATCH {*} ON GRAPH * RELATIONSHIP * TO `editor`

GRANT MATCH {*} ON GRAPH * RELATIONSHIP * TO `publisher`

GRANT MATCH {*} ON GRAPH * RELATIONSHIP * TO `reader`

GRANT NAME MANAGEMENT ON DATABASE * TO `admin`

GRANT NAME MANAGEMENT ON DATABASE * TO `architect`

GRANT NAME MANAGEMENT ON DATABASE * TO `publisher`

GRANT START ON DATABASE * TO `admin`

GRANT STOP ON DATABASE * TO `admin`

GRANT TRANSACTION MANAGEMENT (*) ON DATABASE * TO `admin`

GRANT WRITE ON GRAPH * TO `admin`

GRANT WRITE ON GRAPH * TO `architect`

GRANT WRITE ON GRAPH * TO `editor`

GRANT WRITE ON GRAPH * TO `publisher`

行数:35

与其他 SHOW 命令一样,输出也可以使用 YIELD / WHERE / RETURN 进行处理。

SHOW PRIVILEGES AS COMMANDS
WHERE command CONTAINS 'MANAGEMENT'
表 19. 结果
命令

GRANT CONSTRAINT MANAGEMENT ON DATABASE * TO `admin`

GRANT CONSTRAINT MANAGEMENT ON DATABASE * TO `architect`

GRANT INDEX MANAGEMENT ON DATABASE * TO `admin`

GRANT INDEX MANAGEMENT ON DATABASE * TO `architect`

GRANT NAME MANAGEMENT ON DATABASE * TO `admin`

GRANT NAME MANAGEMENT ON DATABASE * TO `architect`

GRANT NAME MANAGEMENT ON DATABASE * TO `publisher`

GRANT TRANSACTION MANAGEMENT (*) ON DATABASE * TO `admin`

行数:8

也可以将权限列为撤销命令,而不是授予或拒绝命令。

SHOW PRIVILEGES AS REVOKE COMMANDS
表 20. 结果
命令

REVOKE DENY ACCESS ON DATABASE `neo4j` FROM `noAccessUsers`

REVOKE GRANT ACCESS ON DATABASE * FROM `admin`

REVOKE GRANT ACCESS ON DATABASE * FROM `architect`

REVOKE GRANT ACCESS ON DATABASE * FROM `editor`

REVOKE GRANT ACCESS ON DATABASE * FROM `publisher`

REVOKE GRANT ACCESS ON DATABASE * FROM `reader`

REVOKE GRANT ACCESS ON DATABASE `neo4j` FROM `regularUsers`

REVOKE GRANT ACCESS ON HOME DATABASE FROM `PUBLIC`

REVOKE GRANT ALL DBMS PRIVILEGES ON DBMS FROM `admin`

REVOKE GRANT CONSTRAINT MANAGEMENT ON DATABASE * FROM `admin`

REVOKE GRANT CONSTRAINT MANAGEMENT ON DATABASE * FROM `architect`

REVOKE GRANT EXECUTE FUNCTION * ON DBMS FROM `PUBLIC`

REVOKE GRANT EXECUTE PROCEDURE * ON DBMS FROM `PUBLIC`

REVOKE GRANT INDEX MANAGEMENT ON DATABASE * FROM `admin`

REVOKE GRANT INDEX MANAGEMENT ON DATABASE * FROM `architect`

REVOKE GRANT MATCH {*} ON GRAPH * NODE * FROM `admin`

REVOKE GRANT MATCH {*} ON GRAPH * NODE * FROM `architect`

REVOKE GRANT MATCH {*} ON GRAPH * NODE * FROM `editor`

REVOKE GRANT MATCH {*} ON GRAPH * NODE * FROM `publisher`

REVOKE GRANT MATCH {*} ON GRAPH * NODE * FROM `reader`

REVOKE GRANT MATCH {*} ON GRAPH * RELATIONSHIP * FROM `admin`

REVOKE GRANT MATCH {*} ON GRAPH * RELATIONSHIP * FROM `architect`

REVOKE GRANT MATCH {*} ON GRAPH * RELATIONSHIP * FROM `editor`

REVOKE GRANT MATCH {*} ON GRAPH * RELATIONSHIP * FROM `publisher`

REVOKE GRANT MATCH {*} ON GRAPH * RELATIONSHIP * FROM `reader`

REVOKE GRANT NAME MANAGEMENT ON DATABASE * FROM `admin`

REVOKE GRANT NAME MANAGEMENT ON DATABASE * FROM `architect`

REVOKE GRANT NAME MANAGEMENT ON DATABASE * FROM `publisher`

REVOKE GRANT START ON DATABASE * FROM `admin`

REVOKE GRANT STOP ON DATABASE * FROM `admin`

REVOKE GRANT TRANSACTION MANAGEMENT (*) ON DATABASE * FROM `admin`

REVOKE GRANT WRITE ON GRAPH * FROM `admin`

REVOKE GRANT WRITE ON GRAPH * FROM `architect`

REVOKE GRANT WRITE ON GRAPH * FROM `editor`

REVOKE GRANT WRITE ON GRAPH * FROM `publisher`

行数:35

有关撤销权限的更多信息,请参阅REVOKE 命令

列出特定角色权限的示例

可以使用 SHOW ROLE name PRIVILEGE[S] 命令显示特定角色的可用权限。

SHOW ROLE[S] name[, ...] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  [WHERE expression]

SHOW ROLE[S] name[, ...] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
SHOW ROLE regularUsers PRIVILEGES

列出角色 regularUsers 的所有权限。

表 21. 结果
访问 操作 资源 角色 不可变

"执行"

"DEFAULT"

"数据库"

"noAccessUsers"

"数据库"

行数:39

"PROCEDURE(*)"

行数:1

SHOW ROLES regularUsers, noAccessUsers PRIVILEGES

列出角色 regularUsersnoAccessUsers 的所有权限。

表 22. 结果
访问 操作 资源 角色 不可变

"neo4j"

"DEFAULT"

"数据库"

"noAccessUsers"

"数据库"

"publisher"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"noAccessUsers"

"数据库"

行数:39

"PROCEDURE(*)"

行数:2

与其他的 SHOW PRIVILEGES 命令类似,角色的可用权限也可以通过可选的 AS COMMAND[S] 列为 Cypher 命令。

SHOW ROLES regularUsers, noAccessUsers PRIVILEGES AS COMMANDS
表 23. 结果
命令

GRANT ACCESS ON DATABASE * TO `admin`

GRANT ALL DBMS PRIVILEGES ON DBMS TO `admin`

GRANT CONSTRAINT MANAGEMENT ON DATABASE * TO `admin`

GRANT INDEX MANAGEMENT ON DATABASE * TO `admin`

GRANT MATCH {*} ON GRAPH * NODE * TO `admin`

GRANT MATCH {*} ON GRAPH * RELATIONSHIP * TO `admin`

GRANT NAME MANAGEMENT ON DATABASE * TO `admin`

GRANT START ON DATABASE * TO `admin`

GRANT STOP ON DATABASE * TO `admin`

GRANT TRANSACTION MANAGEMENT (*) ON DATABASE * TO `admin`

GRANT WRITE ON GRAPH * TO `admin`

行数:11

输出也可以在这里使用 YIELD / WHERE / RETURN 进行处理。

SHOW ROLE architect PRIVILEGES AS COMMANDS WHERE command CONTAINS 'MATCH'
表 24. 结果
命令

GRANT MATCH {*} ON GRAPH * NODE * TO `architect`

GRANT MATCH {*} ON GRAPH * RELATIONSHIP * TO `architect`

行数:2

同样,可以将权限列为撤销命令,而不是授予或拒绝命令。有关撤销权限的更多信息,请参阅REVOKE 命令

SHOW ROLE reader PRIVILEGES AS REVOKE COMMANDS
表 25. 结果
命令

REVOKE GRANT ACCESS ON DATABASE * FROM `reader`

REVOKE GRANT MATCH {*} ON GRAPH * NODE * FROM `reader`

REVOKE GRANT MATCH {*} ON GRAPH * RELATIONSHIP * FROM `reader`

行数:3

列出特定用户权限的示例

可以使用 SHOW USER name PRIVILEGES 命令显示特定用户的可用权限。

请注意,如果正在使用非原生认证提供商(如 LDAP),SHOW USER PRIVILEGES 将只能在有限范围内工作,因为用户只能显示自己的权限。使用非原生认证提供商时,无法列出其他用户的权限。

SHOW USER[S] [name[, ...]] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  [WHERE expression]

SHOW USER[S] [name[, ...]] PRIVILEGE[S] [AS [REVOKE] COMMAND[S]]
  YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
SHOW USER jake PRIVILEGES

列出用户 jake 的所有权限。

表 26. 结果
访问 操作 资源 资源 角色 不可变

"执行"

"FUNCTION(*)"

"数据库"

"*"

"PUBLIC"

false

"jake"

"PROCEDURE(*)"

"执行"

"FUNCTION(*)"

"数据库"

"*"

"访问"

false

"jake"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"匹配"

"数据库"

false

"jake"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"noAccessUsers"

"数据库"

行数:39

"jake"

"PROCEDURE(*)"

行数:4

SHOW USERS jake, joe PRIVILEGES

列出用户 jakejoe 的所有权限。

表 27. 结果
访问 操作 资源 资源 角色 不可变

"执行"

"FUNCTION(*)"

"数据库"

"*"

"PUBLIC"

false

"jake"

"PROCEDURE(*)"

"执行"

"FUNCTION(*)"

"数据库"

"*"

"访问"

false

"jake"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"匹配"

"数据库"

false

"jake"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"noAccessUsers"

"数据库"

行数:39

"jake"

"PROCEDURE(*)"

"执行"

"FUNCTION(*)"

"数据库"

"*"

"PUBLIC"

false

"joe"

"PROCEDURE(*)"

"执行"

"FUNCTION(*)"

"数据库"

"*"

"访问"

false

"joe"

"PROCEDURE(*)"

"执行"

"DEFAULT"

"数据库"

"匹配"

"数据库"

false

"joe"

"PROCEDURE(*)"

"neo4j"

"DEFAULT"

"数据库"

"noAccessUsers"

"数据库"

"publisher"

"joe"

"PROCEDURE(*)"

行数:8

该命令始终可用于查看当前用户的可用权限。为此,该命令有一个更短的形式:SHOW USER PRIVILEGES

SHOW USER PRIVILEGES

至于其他权限命令,用户的可用权限也可以通过可选的 AS COMMAND[S] 列为 Cypher 命令。

当将用户权限显示为命令时,Cypher 命令中的角色会被参数替换。这可用于根据特定用户的权限快速创建新角色。

SHOW USER jake PRIVILEGES AS COMMANDS
表 28. 结果
命令

GRANT ACCESS ON DATABASE `neo4j` TO $role

GRANT ACCESS ON HOME DATABASE TO $role

GRANT EXECUTE FUNCTION * ON DBMS TO $role

GRANT EXECUTE PROCEDURE * ON DBMS TO $role

行数:4

与其他 SHOW 命令一样,输出也可以使用 YIELD / WHERE / RETURN 进行处理。此外,与其他的显示权限命令类似,也可以显示撤销权限的命令。

SHOW USER jake PRIVILEGES AS REVOKE COMMANDS
WHERE command CONTAINS 'EXECUTE'
表 29. 结果
命令

REVOKE GRANT EXECUTE FUNCTION * ON DBMS FROM $role

REVOKE GRANT EXECUTE PROCEDURE * ON DBMS FROM $role

行数:2

撤销权限

先前授予或拒绝的权限可以使用 REVOKE 命令撤销。

REVOKE
  [ IMMUTABLE ]
  [ GRANT | DENY ] graph-privilege
  FROM role[, ...]

此处给出了 REVOKE 命令的一个使用示例

REVOKE GRANT TRAVERSE ON HOME GRAPH NODES Post FROM regularUsers

虽然可以明确指定 REVOKE 应该移除 GRANTDENY,但也可以不指定它们来撤销两者,如下一个示例所示。因此,如果同一权限恰好存在 GRANTDENY,则两者都将被移除。

REVOKE TRAVERSE ON HOME GRAPH NODES Payments FROM regularUsers

添加 IMMUTABLE 明确指定只应移除不可变权限。省略它则指定应移除不可变权限和常规权限。

© . All rights reserved.