基于角色的访问控制
基于角色的访问控制 (RBAC) 是一种通过将用户分配给具有特定权限集的特定角色来限制授权用户访问的方法。权限使用组合的允许列表/拒绝列表机制来控制对图元素的访问权限。可以授予或拒绝访问,也可以使用二者的组合。如果用户具有与该资源相关的 GRANT
(允许列表)且没有 DENY
(拒绝列表),则用户将能够访问该资源。所有其他 GRANT
和 DENY
的组合将导致匹配的路径不可访问。这在实践中的含义取决于我们是在谈论 读取权限 还是 写入权限
如果用户也没有获得数据库 |
有关语法描述的更多详细信息,请参阅用于管理命令的 Cypher 语法。 |
图权限命令 (GRANT
、DENY
和 REVOKE
)
管理员可以使用 Cypher 命令来管理 Neo4j 图的管理权限。图权限命令的组成部分包括:
-
命令:
-
GRANT
- 将权限授予角色。 -
DENY
- 拒绝角色的权限。 -
REVOKE
- 从角色中删除授予或拒绝的权限。
-
-
可变性:
-
在执行
GRANT
或DENY
时,可以选择指定IMMUTABLE
,表示该权限不能被随后删除,除非禁用身份验证。为了授予或拒绝不可变权限,也必须禁用身份验证。相反,当IMMUTABLE
与REVOKE
命令一起指定时,它将充当过滤器,仅移除匹配的不可变权限。另请参阅不可变权限。
-
-
图权限:
-
名称:
-
与权限关联的图或图。因为在 Neo4j 5 中,每个数据库只能有一个图,所以此命令使用数据库名称或别名来引用该图。使用别名时,该命令将在解析的图上执行。
如果删除数据库并使用相同名称创建新数据库,新数据库将不会具有以前分配给已删除图的权限。
-
它可以是
*
,表示所有图。在此命令执行后创建的图也将与这些权限相关联。 -
HOME GRAPH
指的是与该用户的主数据库相关联的图。如果用户没有配置主数据库,则默认数据库将用作主数据库。如果用户的主数据库因任何原因在创建权限后发生更改,则这些权限将与附加到新数据库的图相关联。这可能非常强大,因为它允许仅通过更改用户的主数据库,将权限从一个图切换到另一个图。
-
-
实体
-
role[, …]
-
要与权限关联的角色或角色,用逗号分隔。
-
命令 |
|
语法 |
|
描述 |
将权限授予一个或多个角色。 |
命令 |
|
语法 |
|
描述 |
拒绝一个或多个角色的权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销已授予的权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销被拒绝的权限。 |
命令 |
|
语法 |
|
描述 |
从一个或多个角色中撤销已授予或拒绝的权限。 |
|
常见的错误,例如拼写错误或尝试撤销未授予或拒绝的权限,将导致通知。在 Neo4j 的未来主要版本中,这些通知中的一些可能会被错误替换。有关通知的详细信息,请参阅状态代码→通知代码。
下面的图像展示了通用的 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]
命令显示已授予或拒绝给角色的权限。
命令 |
|
语法 |
|
描述 |
列出所有已授予或拒绝的权限。 |
命令 |
|
语法 |
|
描述 |
列出授予或拒绝给特定角色的权限。 |
命令 |
|
语法 |
|
描述 |
列出特定用户或当前用户的权限。 [NOTE] ==== 请注意,用户只能显示自己的权限。因此,如果使用非本地身份验证提供程序(如 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
结合使用时非常有用。在此示例中,查询返回每页显示五个权限,并跳过前五个以显示第二页。
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
命令类似,角色的可用权限也可以使用可选的 AS COMMAND[S]
以 Cypher 命令的形式列出。
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
与其他权限命令一样,用户的可用权限也可以使用可选的 AS COMMAND[S]
以 Cypher 命令的形式列出。
当将用户权限显示为命令时,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
明确指定只应删除不可变权限。省略它指定应删除不可变权限和常规权限。