基于角色的访问控制
基于角色的访问控制 (RBAC) 是一种通过将用户分配到具有特定权限集来限制授权用户访问的方法。权限使用组合的允许列表/拒绝列表机制控制对图元素的访问权限。可以授予或拒绝访问权限,或结合使用这两种方式。如果用户具有与该资源相关的 GRANT
(允许列表)且没有 DENY
(拒绝列表),则他们将能够访问该资源。GRANT
和 DENY
的所有其他组合将导致匹配路径不可访问。这在实践中意味着什么取决于我们谈论的是读取权限还是写入权限
如果用户未被授予数据库 |
有关语法描述的更多详细信息,请参阅数据库管理命令语法。 |
图权限命令
管理员可以使用 Cypher 命令 GRANT
、DENY
和 REVOKE
来管理 Neo4j 图管理权限。这些命令可用于向角色授予或拒绝权限,以及撤销先前授予或拒绝的权限。权限可以在整个图或图内的特定元素上授予或拒绝。权限也可以设置为不可变,这意味着除非禁用身份验证,否则无法授予、拒绝或撤销它们。
图权限命令的组成部分
图权限命令的组成部分包括
-
命令:
-
GRANT
– 授予角色权限。 -
DENY
– 拒绝角色权限。 -
REVOKE
– 从角色中移除已授予或拒绝的权限。
-
-
可变性:
-
执行
GRANT
或DENY
时可选择指定IMMUTABLE
,以表明除非禁用身份验证,否则该权限不能随后被移除。要授予或拒绝不可变权限,也必须禁用身份验证。相反,当IMMUTABLE
与REVOKE
命令一起指定时,它将充当过滤器,并且只移除匹配的不可变权限。不可变权限也可以与不可变角色一起使用。更多信息请参阅不可变角色和权限。
-
-
图权限:
-
名称:
-
与权限关联的图。由于在 Neo4j 2025.05 中,每个数据库只能有一个图,因此此命令使用数据库名称或别名来引用该图。当使用别名时,命令将在解析的图上执行。
如果删除一个数据库并创建一个同名的新数据库,新数据库将不具有先前分配给已删除图的权限。
-
可以是
*
,表示所有图。此命令执行后创建的图也将与这些权限关联。 -
HOME GRAPH
指的是与该用户的“主数据库 (home database)”关联的图。如果用户没有配置主数据库,则将使用默认数据库作为主数据库。如果用户的主数据库在创建权限后因任何原因发生更改,则这些权限将与附加到新数据库的图关联。这非常强大,因为它允许通过简单地更改用户的主数据库来将权限从一个图切换到另一个图。
-
-
实体
-
角色[, …]
-
要与权限关联的一个或多个角色,以逗号分隔。
-
图权限命令的通用语法
命令 |
|
语法 |
|
描述 |
授予一个或多个角色权限。 |
命令 |
|
语法 |
|
描述 |
拒绝一个或多个角色权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销已授予的权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销已拒绝的权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销已授予或拒绝的权限。 |
|
常见的错误,例如拼写错误或尝试撤销未授予或拒绝的权限,将导致通知。这些通知中的一些可能会在 Neo4j 的未来主要版本中被错误取代。有关通知的详细信息,请参阅状态码 → 通知码。
以下图像展示了 GRANT
和 DENY
的通用语法
GRANT
和 DENY
语法图权限的更详细语法示例如下
GRANT
和 DENY
图权限的语法。{
和 }
是语法的一部分,不用于分组。下图显示了不同图权限之间的层级关系
列出支持的权限
可以使用 SHOW SUPPORTED PRIVILEGES
命令显示支持的权限。此命令列出了可在服务器上授予或拒绝的权限,以及权限的结构。
命令 |
|
语法 |
|
描述 |
列出服务器支持的所有权限。 |
使用 RETURN
子句时,YIELD
子句是强制性的,不得省略。
结果将包含描述权限的多个列
列 | 描述 | 类型 |
---|---|---|
|
权限操作。 |
|
|
用于进一步限制权限目标的限定符( |
|
|
权限目标: |
|
|
权限可能范围的列表( |
|
|
权限的简短描述。 |
|
如果权限列出了限定符,则必须在命令中使用标识符或 *
(如果它应影响所有标识符)。下表演示了限定符的使用方式
限定符 | 示例 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
指定权限的范围是可选的。如果未指定,默认范围将是 ELEMENTS *
。请注意,并非所有权限都具有范围。
列出支持权限的示例
SHOW SUPPORTED PRIVILEGES YIELD * ORDER BY action DESC LIMIT 10 RETURN action, qualifier, target, scope, description
列出 10 个受支持的权限
操作 | 限定符 | 目标 | 范围 | 描述 |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:10 |
列出已分配的权限
可以使用以下 SHOW PRIVILEGE[S]
命令显示已授予或拒绝给角色的权限。
命令 |
|
语法 |
|
描述 |
列出所有已授予或拒绝的权限。 |
命令 |
|
语法 |
|
描述 |
列出授予或拒绝给特定角色的权限。 |
命令 |
|
语法 |
|
描述 |
列出特定用户或当前用户的权限。 [注意] ==== 请注意,用户只能显示他们自己的权限。因此,如果正在使用非原生认证提供商(如 LDAP), 当使用非原生身份验证提供商时,无法列出其他用户的权限。 ==== |
使用 RETURN
子句时,YIELD
子句是强制性的,不得省略。
为了方便概览现有权限,建议使用 SHOW
命令的 AS COMMANDS
版本,它返回两列。
列 | 描述 | 类型 |
---|---|---|
命令 |
作为被授予或拒绝的命令的权限。或者在 |
|
不可变 |
权限是否不可变。 |
|
或者,您可以省略 AS COMMANDS
子句,并获取在多列中返回的权限的完整详细信息。默认情况下,所有权限都会返回,无需 YIELD
。
列 | 描述 | 类型 |
---|---|---|
|
权限是授予还是拒绝。 |
|
|
权限类型。例如,遍历、读取、索引管理或角色管理。 |
|
|
权限范围。例如,整个 DBMS、特定数据库、图或子图访问。 |
|
|
权限适用的特定数据库或图。 |
|
|
权限适用的标签、关系类型、模式、过程、函数、事务或设置(如果适用)。 |
|
|
权限被授予的角色。 |
|
|
权限是否不可变。 |
|
|
|
可以使用不同的 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. 结果
访问 | 操作 | 资源 | 图 | 段 | 角色 | 不可变 |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数: 39 |
|
也可以使用 YIELD
、ORDER BY
和 WHERE
过滤和排序结果
SHOW PRIVILEGES YIELD role, access, action, segment
ORDER BY action
WHERE role = 'admin'
在此示例中
-
返回的列数已通过
YIELD
子句减少。 -
返回列的顺序已更改。
-
结果已使用
WHERE
子句过滤,仅返回admin
角色。 -
结果使用
ORDER BY
按action
列排序。
SKIP
和 LIMIT
也可用于结果分页。
角色 | 访问 | 操作 | 段 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:12 |
|
WHERE
也可以在没有 YIELD
的情况下使用
SHOW PRIVILEGES
WHERE graph <> '*'
在此示例中,WHERE
子句用于将权限过滤到仅针对特定图的权限。
访问 | 操作 | 图 | 资源 | 角色 | 段 |
---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:3 |
RETURN
子句中的聚合可用于对权限进行分组。在此示例中,按用户以及 GRANTED
或 DENIED
进行分组。
SHOW PRIVILEGES YIELD * RETURN role, access, collect([graph, resource, segment, action]) AS privileges
角色 | 访问 | 权限 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:8 |
|
RETURN
子句也可用于排序和分页结果,这与 YIELD
和 WHERE
结合使用时非常有用。在此示例中,查询返回权限,每页显示五条,并跳过前五条以显示第二页。
SHOW PRIVILEGES YIELD * RETURN * ORDER BY role SKIP 5 LIMIT 5
访问 | 操作 | 图 | 资源 | 角色 | 段 | 不可变 |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:5 |
通过添加 AS COMMAND[S]
,也可以将可用权限显示为 Cypher 命令。
SHOW PRIVILEGES AS COMMANDS
命令 |
---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:35 |
与其他 SHOW
命令一样,输出也可以使用 YIELD
/ WHERE
/ RETURN
进行处理。
SHOW PRIVILEGES AS COMMANDS
WHERE command CONTAINS 'MANAGEMENT'
命令 |
---|
|
|
|
|
|
|
|
|
行数:8 |
也可以将权限列为撤销命令,而不是授予或拒绝命令。
SHOW PRIVILEGES AS REVOKE COMMANDS
命令 |
---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数: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
的所有权限。
访问 | 操作 | 图 | 资源 | 角色 | 段 | 不可变 |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
行数:1 |
SHOW ROLES regularUsers, noAccessUsers PRIVILEGES
列出角色 regularUsers
和 noAccessUsers
的所有权限。
访问 | 操作 | 图 | 资源 | 角色 | 段 | 不可变 |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:2 |
与其他的 SHOW PRIVILEGES
命令类似,角色的可用权限也可以通过可选的 AS COMMAND[S]
列为 Cypher 命令。
SHOW ROLES regularUsers, noAccessUsers PRIVILEGES AS COMMANDS
命令 |
---|
|
|
|
|
|
|
|
|
|
|
|
行数:11 |
输出也可以在这里使用 YIELD
/ WHERE
/ RETURN
进行处理。
SHOW ROLE architect PRIVILEGES AS COMMANDS WHERE command CONTAINS 'MATCH'
命令 |
---|
|
|
|
同样,可以将权限列为撤销命令,而不是授予或拒绝命令。有关撤销权限的更多信息,请参阅REVOKE
命令。
SHOW ROLE reader PRIVILEGES AS REVOKE COMMANDS
命令 |
---|
|
|
|
行数:3 |
列出特定用户权限的示例
可以使用 SHOW USER name PRIVILEGES
命令显示特定用户的可用权限。
请注意,如果正在使用非原生认证提供商(如 LDAP), |
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
的所有权限。
访问 | 操作 | 资源 | 图 | 资源 | 角色 | 段 | 不可变 |
---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:4 |
SHOW USERS jake, joe PRIVILEGES
列出用户 jake
和 joe
的所有权限。
访问 | 操作 | 资源 | 图 | 资源 | 角色 | 段 | 不可变 |
---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:8 |
该命令始终可用于查看当前用户的可用权限。为此,该命令有一个更短的形式:SHOW USER PRIVILEGES
。
SHOW USER PRIVILEGES
至于其他权限命令,用户的可用权限也可以通过可选的 AS COMMAND[S]
列为 Cypher 命令。
当将用户权限显示为命令时,Cypher 命令中的角色会被参数替换。这可用于根据特定用户的权限快速创建新角色。 |
SHOW USER jake PRIVILEGES AS COMMANDS
命令 |
---|
|
|
|
|
行数:4 |
与其他 SHOW
命令一样,输出也可以使用 YIELD
/ WHERE
/ RETURN
进行处理。此外,与其他的显示权限命令类似,也可以显示撤销权限的命令。
SHOW USER jake PRIVILEGES AS REVOKE COMMANDS
WHERE command CONTAINS 'EXECUTE'
命令 |
---|
|
|
行数:2 |
撤销权限
先前授予或拒绝的权限可以使用 REVOKE
命令撤销。
REVOKE
[ IMMUTABLE ]
[ GRANT | DENY ] graph-privilege
FROM role[, ...]
此处给出了 REVOKE
命令的一个使用示例
REVOKE GRANT TRAVERSE ON HOME GRAPH NODES Post FROM regularUsers
虽然可以明确指定 REVOKE
应该移除 GRANT
或 DENY
,但也可以不指定它们来撤销两者,如下一个示例所示。因此,如果同一权限恰好存在 GRANT
和 DENY
,则两者都将被移除。
REVOKE TRAVERSE ON HOME GRAPH NODES Payments FROM regularUsers
添加 IMMUTABLE
明确指定只应移除不可变权限。省略它则指定应移除不可变权限和常规权限。