内置角色和权限

介绍

Neo4j 提供了一组内置角色,可用于控制对数据库的访问。PUBLIC 角色是所有用户的默认角色。它没有授予有关数据的任何权限或功能,甚至没有读取权限。其余内置角色是分层的,reader 角色位于最底部,admin 角色位于最顶部,拥有所有权限。

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

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

PUBLIC
  • 访问主数据库。

  • 使用用户的权限执行过程。

  • 使用用户的权限执行用户定义的函数。

  • 加载数据。

读取器
  • 访问所有数据库。

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

  • 显示索引和约束以及任何其他未来的模式构造。

编辑器
  • 访问所有数据库。

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

  • 写入访问,仅限于创建和更改现有属性键、节点标签和图的关系类型。换句话说,editor角色不能添加到模式中,但只能对已存在的对象进行更改。

  • 显示索引和约束以及任何其他未来的模式构造。

发布者
  • 访问所有数据库。

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

  • 显示索引和约束以及任何其他未来的模式构造。

架构师
  • 访问所有数据库。

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

  • 创建/删除/显示索引和约束以及任何其他未来的模式构造。

管理员
  • 访问所有数据库。

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

  • 加载数据。

  • 创建/删除/显示索引和约束以及任何其他未来的模式构造。

  • 使用提升的权限执行过程。

  • 执行管理员过程。

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

  • 查看/终止查询。

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

当管理员暂停或删除另一个用户时,将应用以下规则

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

  • 暂停后,用户将无法再登录,直到被管理员重新激活。

  • 在删除用户之前,无需删除分配给用户的角色。

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

Neo4j 提供以下内置角色,这些角色具有默认权限和功能。社区版中可用的功能子集也包含在内。所有命令都需要执行命令的用户具有执行该命令的权限。

表 1. 内置角色功能
操作 读取器 编辑器 发布者 架构师 管理员 PUBLIC 社区版可用

更改自己的密码

查看自己的详细信息

查看自己的事务

终止自己的事务

查看自己的权限

查看所有数据库

访问主数据库

访问所有数据库

读取数据

查看索引/约束

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

创建新的属性键类型

创建新的节点标签类型

创建新的关系类型

创建/删除索引/约束

创建/删除用户

更改另一个用户的名称

更改另一个用户的密码

更改另一个用户的主数据库

暂停/激活用户

创建/删除角色

更改角色名称

分配/取消分配用户角色

创建/删除/修改数据库

启动/停止数据库

管理数据库访问

授予/拒绝/撤销权限

查看所有用户

查看所有角色

查看用户的全部角色

查看角色的所有用户

查看另一个用户的权限

查看所有事务

终止所有事务

加载数据

执行过程

执行函数

执行管理员过程

动态更改配置 [1]

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

PUBLIC 角色

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

PUBLIC 角色不能被删除或从任何用户撤销,但角色的特定权限可以被修改。与 PUBLIC 角色相反,其他内置角色可以被授予、撤销、删除和重新创建。

列出 PUBLIC 角色权限

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

"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. 结果
命令

"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. 结果
命令

"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. 结果
命令

"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. 结果
命令

"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 权限 以控制对整个系统执行操作的权限

这些权限是使用权限授予的,这些权限可以通过 GRANTDENYREVOKE 命令 进行管理。

列出 admin 角色权限

SHOW ROLE admin PRIVILEGES AS COMMANDS
表 7. 结果
命令

"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角色的更多信息,请参见恢复 admin 角色.