内置角色和权限

简介

Neo4j 提供了一组内置角色,可用于控制对数据库的访问。PUBLIC 角色是所有用户的默认角色。它不赋予关于数据的任何权利或能力,甚至连读取权限都没有。其余内置角色具有层级关系,其中 reader(读者)角色位于底部,而 admin(管理员)角色位于顶部,拥有所有权限。

用户可以拥有多个分配的角色,这些角色的并集决定了用户可以对数据执行哪些操作。例如,分配给 reader 角色的用户可以执行过程,因为所有用户也被分配到了 PUBLIC 角色,而该角色启用了此项能力。

内置角色具有以下默认权限

PUBLIC
  • 访问主数据库的权限。

  • 以用户自身权限执行过程。

  • 以用户自身权限执行用户自定义函数。

  • 加载数据。

reader
  • 访问所有数据库的权限。

  • 遍历和读取数据图(所有节点、关系、属性)。

  • 查看索引、约束以及未来任何其他模式结构。

editor
  • 访问所有数据库的权限。

  • 遍历、读取和写入数据图。

  • 写入权限,仅限于创建和更改图中现有的属性键、节点标签和关系类型。换句话说,editor 角色无法向模式(schema)添加内容,只能对已经存在的对象进行更改。

  • 查看索引、约束以及未来任何其他模式结构。

publisher
  • 访问所有数据库的权限。

  • 遍历、读取和写入数据图。

  • 查看索引、约束以及未来任何其他模式结构。

architect
  • 访问所有数据库的权限。

  • 遍历、读取和写入数据图。

  • 创建/删除/查看索引和约束,以及未来任何其他模式结构。

admin
  • 访问所有数据库的权限。

  • 遍历、读取和写入数据图。

  • 加载数据。

  • 创建/删除/查看索引和约束,以及未来任何其他模式结构。

  • 以提升的权限执行过程。

  • 执行管理过程。

  • 以提升的权限执行用户自定义函数。

  • 查看/终止查询。

  • 管理数据库、用户、角色和权限。

当管理员挂起或删除其他用户时,适用以下规则

  • 管理员可以挂起或删除任何其他用户(包括其他管理员),但不能删除自己。

  • 当用户被挂起时,除非由管理员重新激活,否则无法重新登录。

  • 在删除用户之前,无需从用户身上移除已分配的角色。

删除用户不会自动终止相关的连接、会话、事务或查询。

Neo4j 提供以下具有默认权限和功能的内置角色。其中也包含了社区版(Community Edition)中可用的功能子集。所有命令都要求执行该命令的用户具备相应的权利。

表 1. 内置角色功能
操作 reader editor publisher architect admin PUBLIC 在社区版中可用

更改自身密码

查看自身详细信息

查看自身事务

终止自身事务

查看自身权限

查看所有数据库

访问主数据库

访问所有数据库

读取数据

查看索引/约束

写入/更新/删除现有数据

创建新类型的属性键

创建新类型的节点标签

创建新类型的关系类型

创建/删除索引/约束

创建/删除用户

更改其他用户的名称

更改其他用户的密码

更改其他用户的主数据库

挂起/激活用户

创建/删除角色

更改角色名称

向用户分配/移除角色

创建/删除/变更数据库

启动/停止数据库

管理数据库访问

授予/拒绝/撤销权限

查看所有用户

查看所有角色

查看用户的全部分配角色

查看角色的全部用户

查看其他用户的权限

查看所有事务

终止所有事务

加载数据

执行过程

执行函数

执行管理过程

动态更改配置 [1]

1. 有关更多信息,请参阅 更新动态设置

PUBLIC 角色

所有用户都被授予 PUBLIC 角色,该角色不能被撤销或删除。默认情况下,它提供对默认数据库的访问权限,并允许加载数据,执行所有过程和用户自定义函数。

PUBLIC 角色不能被删除,也不能从任何用户身上撤销,但可以修改该角色的具体权限。与 PUBLIC 角色不同,其他内置角色可以被授予、撤销、删除和重新创建。

列出 PUBLIC 角色权限

SHOW ROLE PUBLIC PRIVILEGES AS COMMANDS
表 2. 结果
command(命令)

"GRANT ACCESS ON HOME DATABASE TO `PUBLIC`"

"GRANT EXECUTE FUNCTION * ON DBMS TO `PUBLIC`"

"GRANT EXECUTE PROCEDURE * ON DBMS TO `PUBLIC`"

"GRANT LOAD ON ALL DATA TO `PUBLIC`"

行:4

重新创建 PUBLIC 角色

PUBLIC 角色无法删除,因此无需重新创建该角色本身。要将该角色恢复到其原始功能,需要执行两个步骤。

首先,应撤销该角色的所有 GRANTDENY 权限(请参阅 SHOW ROLE PUBLIC PRIVILEGES AS REVOKE COMMANDS 的输出以了解如何撤销)。其次,运行这些查询

GRANT ACCESS ON HOME DATABASE TO PUBLIC
GRANT EXECUTE PROCEDURES * ON DBMS TO PUBLIC
GRANT EXECUTE USER DEFINED FUNCTIONS * ON DBMS TO PUBLIC
GRANT LOAD ON ALL DATA TO PUBLIC

生成的 PUBLIC 角色现在拥有与原始内置 PUBLIC 角色相同的权限。

reader 角色

reader 角色可以在除 system 数据库之外的所有图上执行只读查询。

列出 reader 角色权限

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

"GRANT ACCESS ON DATABASE * TO `reader`"

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

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

"GRANT SHOW CONSTRAINT ON DATABASE * TO `reader`"

"GRANT SHOW INDEX ON DATABASE * TO `reader`"

行:5

重新创建 reader 角色

要将该角色恢复到其原始功能,需要执行两个步骤。首先,执行 DROP ROLE reader。其次,运行这些查询

CREATE ROLE reader
GRANT ACCESS ON DATABASE * TO reader
GRANT MATCH {*} ON GRAPH * TO reader
GRANT SHOW CONSTRAINT ON DATABASE * TO reader
GRANT SHOW INDEX ON DATABASE * TO reader

生成的 reader 角色现在拥有与原始内置 reader 角色相同的权限。

editor 角色

editor 角色可以在除 system 数据库之外的所有图上执行读写操作,但它不能创建新的标签、属性键或关系类型。

列出 editor 角色权限

SHOW ROLE editor PRIVILEGES AS COMMANDS
表 4. 结果
command(命令)

"GRANT ACCESS ON DATABASE * TO `editor`"

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

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

"GRANT SHOW CONSTRAINT ON DATABASE * TO `editor`"

"GRANT SHOW INDEX ON DATABASE * TO `editor`"

"GRANT WRITE ON GRAPH * TO `editor`"

行数: 6

重新创建 editor 角色

要将该角色恢复到其原始功能,需要执行两个步骤。首先,执行 DROP ROLE editor。其次,运行这些查询

CREATE ROLE editor
GRANT ACCESS ON DATABASE * TO editor
GRANT MATCH {*} ON GRAPH * TO editor
GRANT WRITE ON GRAPH * TO editor
GRANT SHOW CONSTRAINT ON DATABASE * TO editor
GRANT SHOW INDEX ON DATABASE * TO editor

生成的 editor 角色现在拥有与原始内置 editor 角色相同的权限。

publisher 角色

publisher 角色可以执行与 editor 相同的操作,此外还可以创建新的标签、属性键和关系类型。

列出 publisher 角色权限

SHOW ROLE publisher PRIVILEGES AS COMMANDS
表 5. 结果
command(命令)

"GRANT ACCESS ON DATABASE * TO `publisher`"

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

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

"GRANT NAME MANAGEMENT ON DATABASE * TO `publisher`"

"GRANT SHOW CONSTRAINT ON DATABASE * TO `publisher`"

"GRANT SHOW INDEX ON DATABASE * TO `publisher`"

"GRANT WRITE ON GRAPH * TO `publisher`"

行:7

重新创建 publisher 角色

要将该角色恢复到其原始功能,需要执行两个步骤。首先,执行 DROP ROLE publisher。其次,运行这些查询

CREATE ROLE publisher
GRANT ACCESS ON DATABASE * TO publisher
GRANT MATCH {*} ON GRAPH * TO publisher
GRANT WRITE ON GRAPH * TO publisher
GRANT NAME MANAGEMENT ON DATABASE * TO publisher
GRANT SHOW CONSTRAINT ON DATABASE * TO publisher
GRANT SHOW INDEX ON DATABASE * TO publisher

生成的 publisher 角色现在拥有与原始内置 publisher 角色相同的权限。

architect 角色

architect 角色可以执行与 publisher 相同的操作,此外还可以创建和管理索引和约束。

列出 architect 角色权限

SHOW ROLE architect PRIVILEGES AS COMMANDS
表 6. 结果
command(命令)

"GRANT ACCESS ON DATABASE * TO `architect`"

"GRANT CONSTRAINT MANAGEMENT ON DATABASE * TO `architect`"

"GRANT INDEX MANAGEMENT ON DATABASE * TO `architect`"

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

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

"GRANT NAME MANAGEMENT ON DATABASE * TO `architect`"

"GRANT SHOW CONSTRAINT ON DATABASE * TO `architect`"

"GRANT SHOW INDEX ON DATABASE * TO `architect`"

"GRANT WRITE ON GRAPH * TO `architect`"

行:9

重新创建 architect 角色

要将该角色恢复到其原始功能,需要执行两个步骤。首先,执行 DROP ROLE architect。其次,运行这些查询

CREATE ROLE architect
GRANT ACCESS ON DATABASE * TO architect
GRANT MATCH {*} ON GRAPH * TO architect
GRANT WRITE ON GRAPH * TO architect
GRANT NAME MANAGEMENT ON DATABASE * TO architect
GRANT SHOW CONSTRAINT ON DATABASE * TO architect
GRANT CONSTRAINT MANAGEMENT ON DATABASE * TO architect
GRANT SHOW INDEX ON DATABASE * TO architect
GRANT INDEX MANAGEMENT ON DATABASE * TO architect

生成的 architect 角色现在拥有与原始内置 architect 角色相同的权限。

admin 角色

admin 角色可以执行与 architect 相同的操作,此外还可以管理数据库、别名、用户、角色和权限。

admin 角色可以执行管理任务。这些包括执行以下几类任务的权利:

  • 管理 数据库权限 以控制对特定数据库执行操作的权利

    • 管理数据库的访问权限以及启动和停止数据库的权利。

    • 管理 索引约束

    • 允许创建标签、关系类型或属性名称。

    • 管理事务。

  • 管理 DBMS 权限 以控制对整个系统执行操作的权利

这些权利通过可以使用 GRANT, DENYREVOKE 命令管理的权限来赋予。

列出 admin 角色权限

SHOW ROLE admin PRIVILEGES AS COMMANDS
表 7. 结果
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 LOAD ON ALL DATA TO `admin`"

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

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

"GRANT NAME MANAGEMENT ON DATABASE * TO `admin`"

"GRANT SHOW CONSTRAINT ON DATABASE * TO `admin`"

"GRANT SHOW INDEX 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`"

行数: 14

如果内置 admin 角色已被更改或删除,并且需要恢复到原始状态,请参阅 密码和用户恢复

重新创建 admin 角色

要将该角色恢复到其原始功能,需要执行两个步骤。首先,执行 DROP ROLE admin。其次,运行这些查询

CREATE ROLE admin
GRANT ALL DBMS PRIVILEGES ON DBMS TO admin
GRANT TRANSACTION MANAGEMENT ON DATABASE * TO admin
GRANT START ON DATABASE * TO admin
GRANT STOP ON DATABASE * TO admin
GRANT MATCH {*} ON GRAPH * TO admin
GRANT WRITE ON GRAPH * TO admin
GRANT LOAD ON ALL DATA TO admin
GRANT ALL ON DATABASE * TO admin

生成的 admin 角色现在拥有与原始内置 admin 角色相同的有效权限。

有关恢复 admin 角色的更多信息,请参阅 恢复管理员角色

© . This site is unofficial and not affiliated with Neo4j, Inc.