基于角色的访问控制

基于角色的访问控制(RBAC)是一种安全方法,通过定义具有特定权限的角色并将用户映射到这些角色来授予用户访问权限。这些权限定义了用户在数据库内可以做什么和不能做什么,例如他们可以读取或写入哪些数据,以及可以执行哪些管理操作。因此,在定义用户角色和权限时,应用最小权限原则非常重要,以确保用户不会被授予超出其所需的访问权限。换句话说,应该只授予用户完成任务所需的最低级别的访问权限,不多不少。

权限通过组合的允许列表/拒绝列表机制来控制对图元素的访问权限。既可以授予或拒绝访问,也可以同时使用两者。如果您拥有资源的 GRANT(允许列表)且没有针对该资源的 DENY(拒绝列表),则您可以访问该资源。所有其他 GRANTDENY 的组合都会导致匹配的路径不可访问。这在实践中的具体含义取决于您拥有的是读取权限还是写入权限

  • 如果由于读取权限而导致实体不可访问,则该数据不可见。对于您来说,这看起来就像拥有一个更小的数据库(更小的图)。

  • 如果由于写入权限而导致实体不可访问,则在任何写入该数据的尝试中都会发生错误。

本页经常使用 'allows'(允许)和 'enables'(启用)这两个术语,方式看似相同。然而,它们之间存在微妙的区别。'enables' 指的是读取权限的后果,即限制不会导致错误,只会导致表观图大小的缩减。'allows' 指的是写入权限的后果,即限制可能会导致错误。

如果用户未被授予数据库 ACCESS 权限,则对整个数据库的访问将被拒绝。有关数据库访问权限的信息,请参阅 ACCESS 权限

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

图权限命令

管理员可以使用 Cypher 命令 GRANTDENYREVOKE 来管理 Neo4j 图管理权限。这些命令可用于向角色授予或拒绝权限,并撤销先前授予或拒绝的权限。可以在整个图或图内的特定元素上授予或拒绝权限。权限还可以设置为不可变的,这意味着除非禁用了身份验证,否则它们不能被授予、拒绝或撤销。请注意,不支持为特定的图或属性分片定义权限。

图权限命令的组件

图权限命令的组件包括

  • 命令:

    • GRANT – 向角色授予权限。

    • DENY – 拒绝角色的权限。

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

  • 可变性:

    • 执行 GRANTDENY 时,可以选择指定 IMMUTABLE,以表明除非禁用身份验证,否则无法删除该权限。同样,必须禁用身份验证才能 GRANTDENY 不可变权限。相反,当 IMMUTABLEREVOKE 命令结合使用时,它将充当过滤器,仅删除匹配的 不可变 权限。不可变权限还可以与不可变角色一起使用。有关详细信息,请参阅 不可变角色和权限

  • 图权限 (graph-privilege):

  • 名称 (name):

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

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

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

    • HOME GRAPH 指的是与该用户的归属数据库相关联的图。如果用户未配置归属数据库,则默认数据库将用作归属数据库。如果用户的归属数据库在权限创建后因任何原因发生了更改,则这些权限将与连接到新数据库的图相关联。这非常强大,因为它只需更改用户的归属数据库即可将权限从一个图切换到另一个图。

  • 实体 (entity)

    • 此权限适用的图元素

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

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

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

      • FOR 模式(匹配该模式的节点)。有关详细信息,请参阅 基于属性的访问控制

    • 标签或类型可以用 * 表示,这意味着所有标签或类型。

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

    • 如果省略,则默认为 ELEMENTS *

    • 某些写入权限命令不允许使用 实体 部分。有关详细信息,请参阅 写入权限

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

  • 角色[, …​] (role)

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

图权限命令的一般语法

表 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

权限不能拒绝给已经分配给身份验证规则的角色。有关身份验证规则的更多信息,请参阅 基于属性的访问控制

常见的错误(例如拼写错误或尝试撤销未被授予或拒绝的权限)将导致通知。在 Cypher 25 中,不可能的 REVOKE 命令(即用户、角色或数据库不存在)的通知已被错误取代。有关通知的详细信息,请参阅 错误与通知的状态码 → 通知代码列表

常规的 GRANTDENY 语法如下图所示

privileges grant and deny syntax
图 1. GRANT 和 DENY 语法

图权限的更详细语法说明如下

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

下图显示了不同图权限之间的层次结构

列出支持的权限

可以使用 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 子句是强制性的,不能省略。

结果将包括多列来描述权限

描述 类型

action(动作)

权限动作。

STRING

qualifier(限定符)

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

STRING

target(目标)

权限的目标:dbmsdatabasegraphcidrall data

STRING

scope(范围)

权限可能范围的列表(elementsnodespatternrelationships),如果适用则为 null。

字符串列表 (LIST OF STRING)

description(描述)

权限的简短描述。

STRING

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

qualifier(限定符) 示例

函数 (function)

... EXECUTE FUNCTION abc* ON …​

标签 (label)

... SET LABEL A ON …​

存储过程 (procedure)

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

属性 (property)

... READ {property} ON …​

设置 (setting)

... SHOW SETTINGS dbms.* ON …​

username

... IMPERSONATE (username) ON …​

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

列出支持权限的示例

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

列出 10 个支持的权限

表 7. 结果
action(动作) qualifier(限定符) target(目标) scope(范围) description(描述)

"write"(写入)

NULL

"graph"(图)

NULL

"允许整个图上的所有 WRITE 操作"

"user management"(用户管理)

NULL

"dbms"

NULL

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

"traverse"(遍历)

NULL

"graph"(图)

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

"使指定的实体能够被找到"

"transaction management"(事务管理)

"username"

"database"

NULL

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

"terminate transactions"(终止事务)

"username"

"database"

NULL

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

"stop"(停止)

NULL

"database"

NULL

"允许停止指定的数据库"

"start"(启动)

NULL

"database"

NULL

"允许启动指定的数据库"

"show user"(显示用户)

NULL

"dbms"

NULL

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

"show transactions"(显示事务)

"username"

"database"

NULL

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

"show settings"(显示设置)

"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 输出
描述 类型

command(命令)

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

STRING

immutable(不可变)

权限是否不可变。

布尔值 (BOOLEAN)

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

表 12. SHOW PRIVILEGES 输出
描述 类型

access(访问)

权限是被授予还是被拒绝。

STRING

action(动作)

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

STRING

resource(资源)

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

STRING

graph(图)

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

STRING

segment(片段)

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

STRING

role(角色)

被授予权限的角色。

STRING

immutable(不可变)

权限是否不可变。

布尔值 (BOOLEAN)

user(用户)

权限所属的用户。

请注意,这仅对 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. 结果
access(访问) action(动作) resource(资源) graph(图) segment(片段) role(角色) immutable(不可变)

"GRANTED"(已授予)

"execute"(执行)

"database"

"*"

"FUNCTION(*)"

"PUBLIC"

false

"GRANTED"(已授予)

"execute"(执行)

"database"

"*"

"PROCEDURE(*)"

"PUBLIC"

false

"GRANTED"(已授予)

"access"(访问)

"database"

"DEFAULT"

"database"

"PUBLIC"

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"NODE(*)"

"admin"(管理员)

false

"GRANTED"(已授予)

"write"(写入)

"graph"(图)

"*"

"NODE(*)"

"admin"(管理员)

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"RELATIONSHIP(*)"

"admin"(管理员)

false

"GRANTED"(已授予)

"write"(写入)

"graph"(图)

"*"

"RELATIONSHIP(*)"

"admin"(管理员)

false

"GRANTED"(已授予)

"transaction_management"(事务管理)

"database"

"*"

"USER(*)"

"admin"(管理员)

false

"GRANTED"(已授予)

"access"(访问)

"database"

"*"

"database"

"admin"(管理员)

false

"GRANTED"(已授予)

"constraint"(约束)

"database"

"*"

"database"

"admin"(管理员)

false

"GRANTED"(已授予)

"dbms_actions"

"database"

"*"

"database"

"admin"(管理员)

false

"GRANTED"(已授予)

"index"(索引)

"database"

"*"

"database"

"admin"(管理员)

false

"GRANTED"(已授予)

"start_database"

"database"

"*"

"database"

"admin"(管理员)

false

"GRANTED"(已授予)

"stop_database"

"database"

"*"

"database"

"admin"(管理员)

false

"GRANTED"(已授予)

"token"

"database"

"*"

"database"

"admin"(管理员)

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"NODE(*)"

"architect"(架构师)

false

"GRANTED"(已授予)

"write"(写入)

"graph"(图)

"*"

"NODE(*)"

"architect"(架构师)

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"RELATIONSHIP(*)"

"architect"(架构师)

false

"GRANTED"(已授予)

"write"(写入)

"graph"(图)

"*"

"RELATIONSHIP(*)"

"architect"(架构师)

false

"GRANTED"(已授予)

"access"(访问)

"database"

"*"

"database"

"architect"(架构师)

false

"GRANTED"(已授予)

"constraint"(约束)

"database"

"*"

"database"

"architect"(架构师)

false

"GRANTED"(已授予)

"index"(索引)

"database"

"*"

"database"

"architect"(架构师)

false

"GRANTED"(已授予)

"token"

"database"

"*"

"database"

"architect"(架构师)

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"NODE(*)"

"editor"(编辑)

false

"GRANTED"(已授予)

"write"(写入)

"graph"(图)

"*"

"NODE(*)"

"editor"(编辑)

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"RELATIONSHIP(*)"

"editor"(编辑)

false

"GRANTED"(已授予)

"write"(写入)

"graph"(图)

"*"

"RELATIONSHIP(*)"

"editor"(编辑)

false

"GRANTED"(已授予)

"access"(访问)

"database"

"*"

"database"

"editor"(编辑)

false

"DENIED"(已拒绝)

"access"(访问)

"database"

"neo4j"

"database"

"noAccessUsers"

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"NODE(*)"

"publisher"(发布者)

false

"GRANTED"(已授予)

"write"(写入)

"graph"(图)

"*"

"NODE(*)"

"publisher"(发布者)

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"RELATIONSHIP(*)"

"publisher"(发布者)

false

"GRANTED"(已授予)

"write"(写入)

"graph"(图)

"*"

"RELATIONSHIP(*)"

"publisher"(发布者)

false

"GRANTED"(已授予)

"access"(访问)

"database"

"*"

"database"

"publisher"(发布者)

false

"GRANTED"(已授予)

"token"

"database"

"*"

"database"

"publisher"(发布者)

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"NODE(*)"

"reader"(读者)

false

"GRANTED"(已授予)

"match"(匹配)

"all_properties"

"*"

"RELATIONSHIP(*)"

"reader"(读者)

false

"GRANTED"(已授予)

"access"(访问)

"database"

"*"

"database"

"reader"(读者)

false

"GRANTED"(已授予)

"access"(访问)

"database"

"neo4j"

"database"

"regularUsers"

false

行数: 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. 结果
role(角色) access(访问) action(动作) segment(片段)

"admin"(管理员)

"GRANTED"(已授予)

"access"(访问)

"database"

"admin"(管理员)

"GRANTED"(已授予)

"constraint"(约束)

"database"

"admin"(管理员)

"GRANTED"(已授予)

"dbms_actions"

"database"

"admin"(管理员)

"GRANTED"(已授予)

"index"(索引)

"database"

"admin"(管理员)

"GRANTED"(已授予)

"match"(匹配)

"NODE(*)"

"admin"(管理员)

"GRANTED"(已授予)

"match"(匹配)

"RELATIONSHIP(*)"

"admin"(管理员)

"GRANTED"(已授予)

"start_database"

"database"

"admin"(管理员)

"GRANTED"(已授予)

"stop_database"

"database"

"admin"(管理员)

"GRANTED"(已授予)

"token"

"database"

"admin"(管理员)

"GRANTED"(已授予)

"transaction_management"(事务管理)

"USER(*)"

"admin"(管理员)

"GRANTED"(已授予)

"write"(写入)

"NODE(*)"

"admin"(管理员)

"GRANTED"(已授予)

"write"(写入)

"RELATIONSHIP(*)"

行数: 12

token 动作对应于 NAME MANAGEMENT 权限。

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

SHOW PRIVILEGES
WHERE graph <> '*'

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

表 15. 结果
access(访问) action(动作) graph(图) resource(资源) role(角色) segment(片段)

"GRANTED"(已授予)

"access"(访问)

"DEFAULT"

"database"

"PUBLIC"

"database"

"DENIED"(已拒绝)

"access"(访问)

"neo4j"

"database"

"noAccessUsers"

"database"

"GRANTED"(已授予)

"access"(访问)

"neo4j"

"database"

"regularUsers"

"database"

行:3

可以使用 RETURN 子句中的聚合来对权限进行分组。在这种情况下,按用户和 GRANTEDDENIED

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

"PUBLIC"

"GRANTED"(已授予)

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

"admin"(管理员)

"GRANTED"(已授予)

[["*","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"]]

"architect"(架构师)

"GRANTED"(已授予)

[["*","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"]]

"editor"(编辑)

"GRANTED"(已授予)

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

"noAccessUsers"

"DENIED"(已拒绝)

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

"publisher"(发布者)

"GRANTED"(已授予)

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

"reader"(读者)

"GRANTED"(已授予)

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

"regularUsers"

"GRANTED"(已授予)

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

行:8

token 动作对应于 NAME MANAGEMENT 权限。

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

SHOW PRIVILEGES YIELD * RETURN * ORDER BY role SKIP 5 LIMIT 5
表 17. 结果
access(访问) action(动作) graph(图) resource(资源) role(角色) segment(片段) immutable(不可变)

"GRANTED"(已授予)

"match"(匹配)

"*"

"all_properties"

"admin"(管理员)

"RELATIONSHIP(*)"

false

"GRANTED"(已授予)

"write"(写入)

"*"

"graph"(图)

"admin"(管理员)

"RELATIONSHIP(*)"

false

"GRANTED"(已授予)

"transaction_management"(事务管理)

"*"

"database"

"admin"(管理员)

"USER(*)"

false

"GRANTED"(已授予)

"access"(访问)

"*"

"database"

"admin"(管理员)

"database"

false

"GRANTED"(已授予)

"constraint"(约束)

"*"

"database"

"admin"(管理员)

"database"

false

行:5

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

SHOW PRIVILEGES AS COMMANDS
表 18. 结果
command(命令)

"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. 结果
command(命令)

"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. 结果
command(命令)

"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. 结果
access(访问) action(动作) graph(图) resource(资源) role(角色) segment(片段) immutable(不可变)

"GRANTED"(已授予)

"access"(访问)

"database"

"neo4j"

"database"

"regularUsers"

false

行:1

SHOW ROLES regularUsers, noAccessUsers PRIVILEGES

列出角色 regularUsersnoAccessUsers 的所有权限。

表 22. 结果
access(访问) action(动作) graph(图) resource(资源) role(角色) segment(片段) immutable(不可变)

"DENIED"(已拒绝)

"access"(访问)

"database"

"neo4j"

"database"

"noAccessUsers"

false

"GRANTED"(已授予)

"access"(访问)

"database"

"neo4j"

"database"

"regularUsers"

false

行:2

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

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

"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. 结果
command(命令)

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

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

行:2

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

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

"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. 结果
access(访问) action(动作) resource(资源) graph(图) resource(资源) role(角色) segment(片段) immutable(不可变)

"GRANTED"(已授予)

"execute"(执行)

"database"

"*"

"FUNCTION(*)"

"PUBLIC"

"jake"

false

"GRANTED"(已授予)

"execute"(执行)

"database"

"*"

"PROCEDURE(*)"

"PUBLIC"

"jake"

false

"GRANTED"(已授予)

"access"(访问)

"database"

"DEFAULT"

"database"

"PUBLIC"

"jake"

false

"GRANTED"(已授予)

"access"(访问)

"database"

"neo4j"

"database"

"regularUsers"

"jake"

false

行:4

SHOW USERS jake, joe PRIVILEGES

列出用户 jakejoe 的所有权限。

表 27. 结果
access(访问) action(动作) resource(资源) graph(图) resource(资源) role(角色) segment(片段) immutable(不可变)

"GRANTED"(已授予)

"execute"(执行)

"database"

"*"

"FUNCTION(*)"

"PUBLIC"

"jake"

false

"GRANTED"(已授予)

"execute"(执行)

"database"

"*"

"PROCEDURE(*)"

"PUBLIC"

"jake"

false

"GRANTED"(已授予)

"access"(访问)

"database"

"DEFAULT"

"database"

"PUBLIC"

"jake"

false

"GRANTED"(已授予)

"access"(访问)

"database"

"neo4j"

"database"

"regularUsers"

"jake"

false

"GRANTED"(已授予)

"execute"(执行)

"database"

"*"

"FUNCTION(*)"

"PUBLIC"

"joe"

false

"GRANTED"(已授予)

"execute"(执行)

"database"

"*"

"PROCEDURE(*)"

"PUBLIC"

"joe"

false

"GRANTED"(已授予)

"access"(访问)

"database"

"DEFAULT"

"database"

"PUBLIC"

"joe"

false

"DENIED"(已拒绝)

"access"(访问)

"database"

"neo4j"

"database"

"noAccessUsers"

"joe"

false

行:8

可以使用相同的命令随时查看当前用户的可用权限。为此,有一个更简短的命令形式:SHOW USER PRIVILEGES

SHOW USER PRIVILEGES

与其他权限命令一样,用户的可用权限也可以列为 Cypher 命令,并带有可选的 AS COMMAND[S]

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

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

"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. 结果
command(命令)

"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 应删除 GRANT 还是 DENY,但也可以不指定任何内容来 REVOKE 两者,如下一个示例所示。因此,如果同一权限既有 GRANT 又有 DENY,它将两者都删除。

REVOKE TRAVERSE ON HOME GRAPH NODES Payments FROM regularUsers

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