基于角色的访问控制

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

  • 如果由于 读取权限 无法访问实体,则数据将变得不可见。对用户而言,它将看起来像他们拥有一个较小的数据库(较小的图)。

  • 如果由于 写入权限 无法访问实体,则在尝试写入该数据时会发生错误。

在此文档中,我们经常以看似相同的方式使用“允许”和“启用”这两个术语。但是,存在细微的差别。我们将使用“启用”来指代 读取权限 的结果,其中限制不会导致错误,只会减少明显的图大小。我们将使用“允许”来指代 写入权限 的结果,其中限制会导致错误。

如果用户也没有获得数据库 ACCESS 权限,则将拒绝访问整个数据库。有关数据库访问权限的信息,请参见 ACCESS 权限

有关语法描述的更多详细信息,请参阅用于管理命令的 Cypher 语法

图权限命令 (GRANTDENYREVOKE)

管理员可以使用 Cypher 命令来管理 Neo4j 图的管理权限。图权限命令的组成部分包括:

  • 命令:

    • GRANT - 将权限授予角色。

    • DENY - 拒绝角色的权限。

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

  • 可变性:

    • 在执行 GRANTDENY 时,可以选择指定 IMMUTABLE,表示该权限不能被随后删除,除非禁用身份验证。为了授予或拒绝不可变权限,也必须禁用身份验证。相反,当 IMMUTABLEREVOKE 命令一起指定时,它将充当过滤器,仅移除匹配的不可变权限。另请参阅不可变权限

  • 图权限:

  • 名称:

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

      如果删除数据库并使用相同名称创建新数据库,新数据库将不会具有以前分配给已删除图的权限。

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

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

  • 实体

    • 此权限适用的图元素

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

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

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

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

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

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

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

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

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

  • role[, …​]

    • 要与权限关联的角色或角色,用逗号分隔。

表 1. 通用授予 ON GRAPH 权限语法

命令

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

语法

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

描述

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

表 2. 通用拒绝 ON GRAPH 权限语法

命令

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

语法

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

描述

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

表 3. 通用撤销 ON GRAPH 权限语法

命令

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

语法

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

描述

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

表 4. 通用撤销 ON GRAPH 权限语法

命令

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

语法

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

描述

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

表 5. 通用撤销 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. GRANT 和 DENY 语法

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

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

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

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

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

描述 类型

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]]

描述

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

[NOTE] ==== 请注意,用户只能显示自己的权限。因此,如果使用非本地身份验证提供程序(如 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"

[["*","数据库","FUNCTION(*)","执行"],["*","数据库","PROCEDURE(*)","执行"],["DEFAULT","数据库","数据库","访问"]]

"admin"

"GRANTED"

[["*","所有属性","NODE(*)","匹配"],["*","图","NODE(*)","写入"],["*","所有属性","RELATIONSHIP(*)","匹配"],["*","图","RELATIONSHIP(*)","写入"],["*","数据库","USER(*)","事务管理"],["*","数据库","数据库","访问"],["*","数据库","数据库","约束"],["*","数据库","数据库","dbms_actions"],["*","数据库","数据库","索引"],["*","数据库","数据库","启动数据库"],["*","数据库","数据库","停止数据库"],["*","数据库","数据库","令牌"]]

"architect"

"GRANTED"

[["*","所有属性","NODE(*)","匹配"],["*","图","NODE(*)","写入"],["*","所有属性","RELATIONSHIP(*)","匹配"],["*","图","RELATIONSHIP(*)","写入"],["*","数据库","数据库","访问"],["*","数据库","数据库","约束"],["*","数据库","数据库","索引"],["*","数据库","数据库","令牌"]]

"editor"

"GRANTED"

[["*","所有属性","NODE(*)","匹配"],["*","图","NODE(*)","写入"],["*","所有属性","RELATIONSHIP(*)","匹配"],["*","图","RELATIONSHIP(*)","写入"],["*","数据库","数据库","访问"]]

"noAccessUsers"

"DENIED"

[["neo4j","数据库","数据库","访问"]]

"publisher"

"GRANTED"

[["*","所有属性","NODE(*)","匹配"],["*","图","NODE(*)","写入"],["*","所有属性","RELATIONSHIP(*)","匹配"],["*","图","RELATIONSHIP(*)","写入"],["*","数据库","数据库","访问"],["*","数据库","数据库","令牌"]]

"reader"

"GRANTED"

[["*","所有属性","NODE(*)","匹配"],["*","所有属性","RELATIONSHIP(*)","匹配"],["*","数据库","数据库","访问"]]

"regularUsers"

"GRANTED"

[["neo4j","数据库","数据库","访问"]]

行数: 8

token 操作对应于 NAME MANAGEMENT 权限。

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

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 命令类似,角色的可用权限也可以使用可选的 AS COMMAND[S] 以 Cypher 命令的形式列出。

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

与其他权限命令一样,用户的可用权限也可以使用可选的 AS COMMAND[S] 以 Cypher 命令的形式列出。

当将用户权限显示为命令时,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 应该删除 GRANTDENY,但也可以通过根本不指定它们来 REVOKE 它们,如下一个示例所示。因此,如果对于同一个权限存在 GRANTDENY,则会删除两者。

REVOKE TRAVERSE ON HOME GRAPH NODES Payments FROM regularUsers

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