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