管理角色

可以使用针对 system 数据库执行的一组 Cypher 管理命令来创建和管理角色。

通过 bolt 连接到 DBMS 时,管理命令会自动路由到 system 数据库。

角色管理命令语法

有关语法说明的更多详细信息,请参阅 用于管理命令的 Cypher 语法

命令

SHOW ROLES

语法

SHOW [ALL|POPULATED] ROLE[S]
  [YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]

描述

列出角色。

使用 RETURN 子句时,YIELD 子句是强制性的,不能省略。

有关更多信息,请参阅 列出角色

所需权限

GRANT SHOW ROLE

(请参阅 DBMS 角色管理权限)。

命令

显示带用户的角色

语法

SHOW [ALL|POPULATED] ROLE[S] WITH USER[S]
  [YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]

描述

列出角色以及分配给它们的用户的列表。

使用 RETURN 子句时,YIELD 子句是强制性的,不能省略。

有关更多信息,请参阅 列出角色

所需权限

GRANT SHOW ROLE

有关更多信息,请参阅 DBMS 角色管理权限

GRANT SHOW USER

有关更多信息,请参阅 DBMS 用户管理权限

命令

显示角色权限

语法

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]]

描述

列出授予指定角色的权限。

使用 RETURN 子句时,YIELD 子句是强制性的,不能省略。

SHOW ROLE name PRIVILEGES 命令在 列出权限 中有描述。

所需权限

GRANT SHOW PRIVILEGE

命令

创建角色

语法

CREATE ROLE name [IF NOT EXISTS] [AS COPY OF otherName]

描述

创建新角色。

有关更多信息,请参阅 创建角色

所需权限

GRANT CREATE ROLE

有关更多信息,请参阅 DBMS 角色管理权限

命令

创建或替换角色

语法

CREATE OR REPLACE ROLE name [AS COPY OF otherName]

描述

创建新角色,如果存在同名角色,则替换它。

有关更多信息,请参阅 创建角色

所需权限

GRANT CREATE ROLE
GRANT DROP ROLE

有关更多信息,请参阅 DBMS 角色管理权限

命令

重命名角色

语法

RENAME ROLE name [IF EXISTS] TO otherName

描述

更改角色的名称。

有关更多信息,请参阅 重命名角色

所需权限

GRANT RENAME ROLE

有关更多信息,请参阅 DBMS 角色管理权限

命令

删除角色

语法

DROP ROLE name [IF EXISTS]

描述

删除角色。

有关更多信息,请参阅 删除角色

所需权限

GRANT DROP ROLE

有关更多信息,请参阅 DBMS 角色管理权限

命令

授予角色

语法

GRANT ROLE[S] name[, ...] TO user[, ...]

描述

将角色分配给用户。

有关更多信息,请参阅 将角色分配给用户

所需权限

GRANT ASSIGN ROLE

有关更多信息,请参阅 DBMS 角色管理权限

命令

撤销角色

语法

REVOKE ROLE[S] name[, ...] FROM user[, ...]

描述

从用户中删除角色。

有关更多信息,请参阅 从用户中撤销角色

所需权限

GRANT REMOVE ROLE

有关更多信息,请参阅 DBMS 角色管理权限

列出角色

可以使用 Cypher 命令 SHOW ROLES 查看所有可用角色,它将返回单列。

表 1. SHOW ROLES 输出
描述 类型

角色

角色名称

字符串

示例 1. 列出所有角色
SHOW ROLES

这与 SHOW ALL ROLES 命令相同。

表 2. 结果
角色

"PUBLIC"

"admin"

"architect"

"editor"

"publisher"

"reader"

行数:6

第一次启动 Neo4j DBMS 时,会有许多内置角色

  • PUBLIC - 所有用户都被授予该角色。默认情况下,它允许访问主数据库并执行存储过程和函数的权限。

  • reader - 可以在所有数据库(除 system 外)中执行遍历和读取操作。

  • editor - 可以在所有数据库(除 system 外)中执行遍历、读取和写入操作,但不能创建新的标签或关系类型。

  • publisher - 可以执行与 editor 相同的操作,还可以创建新的标签和关系类型。

  • architect - 可以执行与 publisher 相同的操作,以及创建和管理索引和约束。

  • admin - 可以执行以上所有操作,以及管理数据库、别名、用户、角色和权限。

有关内置角色及其权限的更多信息,请参阅 内置角色和权限

该命令有多个版本,默认值为 SHOW ALL ROLES。要仅显示分配给用户的角色,则命令为 SHOW POPULATED ROLES。要查看分配给每个角色的用户,可以将 WITH USERS 添加到命令中。该命令会为每个角色每个用户生成一行,并生成以下列,除了 SHOW ROLES 输出的列以外

表 3. SHOW POPULATED ROLES WITH USERS 输出
描述 类型

成员

用户名

字符串

由于这会提供每个用户一行结果,如果一个角色分配给两个用户,则该角色会显示两次。

示例 2. 显示带用户的角色
SHOW POPULATED ROLES WITH USERS

结果表将显示有关角色及其所属数据库的信息

表 4. 结果
角色 成员

"PUBLIC"

"neo4j"

"PUBLIC"

"bob"

"PUBLIC"

"user1"

"PUBLIC"

"user2"

"PUBLIC"

"user3"

"admin"

"neo4j"

行数:6

还可以使用 YIELDORDER BYWHERE 对结果进行过滤和排序。

示例 3. 显示排序和过滤后的角色
SHOW ROLES YIELD role
ORDER BY role
WHERE role ENDS WITH 'r'

在本示例中

  • 结果已过滤,只返回以“r”结尾的角色。

  • 结果使用 ORDER BYaction 列排序。

还可以使用 SKIPLIMIT 对结果进行分页。

表 5. 结果
角色

"editor"

"publisher"

"reader"

行数:3

创建角色

可以使用 CREATE ROLE 创建角色

CREATE ROLE name [IF NOT EXISTS] [AS COPY OF otherName]

可以使用 CREATE OR REPLACE ROLE 创建或替换角色

CREATE OR REPLACE ROLE name [AS COPY OF otherName]

以下命名规则适用

  • 第一个字符必须是 ASCII 字母字符。

  • 后续字符可以是 ASCII 字母字符、数字字符和下划线。

  • 角色名称区分大小写。

可以使用 CREATE ROLE name AS COPY OF otherName 复制角色,保留其权限。

示例 4. 复制角色
CREATE ROLE mysecondrole AS COPY OF myrole

创建的角色将出现在 SHOW ROLES 提供的列表中。

示例 5. 列出角色
SHOW ROLES
表 6. 结果
角色

"PUBLIC"

"admin"

"architect"

"editor"

"myrole"

"mysecondrole"

"publisher"

"reader"

行数:8

CREATE ROLE 命令是可选的幂等命令,默认行为是在角色已存在的情况下抛出异常。将 IF NOT EXISTS 添加到 CREATE ROLE 命令将确保如果角色已存在,则不会抛出异常,并且不会发生任何操作。

示例 6. 如果不存在则创建角色
CREATE ROLE myrole IF NOT EXISTS

CREATE OR REPLACE ROLE 命令会导致删除任何现有角色并创建一个新的角色。

示例 7. 创建或替换角色
CREATE OR REPLACE ROLE myrole

这等效于运行 DROP ROLE myrole IF EXISTS 然后运行 CREATE ROLE myrole

  • CREATE OR REPLACE ROLE 命令不允许使用 IF NOT EXISTS

重命名角色

可以使用 RENAME ROLE 命令重命名角色

RENAME ROLE mysecondrole TO mythirdrole
SHOW ROLES
表 7. 结果
角色

"PUBLIC"

"admin"

"architect"

"editor"

"myrole"

"mythirdrole"

"publisher"

"reader"

行数:8

RENAME ROLE 命令仅在使用本机身份验证和授权时可用。

将角色分配给用户

可以通过使用 GRANT ROLE 将角色分配给用户来授予用户访问权限

GRANT ROLE myrole TO bob

分配给每个用户的角色可以在 SHOW USERS 提供的列表中查看

SHOW USERS
表 8. 结果
用户 角色 passwordChangeRequired 已暂停 主页

"bob"

["myrole","PUBLIC"]

false

false

<null>

"neo4j"

["admin","PUBLIC"]

true

false

<null>

"user1"

["PUBLIC"]

true

false

<null>

"user2"

["PUBLIC"]

true

false

<null>

"user3"

["PUBLIC"]

true

false

<null>

行数:5

可以在一个命令中将多个角色分配给多个用户

GRANT ROLES role1, role2 TO user1, user2, user3
SHOW USERS
表 9. 结果
用户 角色 passwordChangeRequired 已暂停 主页

"bob"

["myrole","PUBLIC"]

false

false

<null>

"neo4j"

["admin","PUBLIC"]

true

false

<null>

"user1"

["role1","role2","PUBLIC"]

true

false

<null>

"user2"

["role1","role2","PUBLIC"]

true

false

<null>

"user3"

["role1","role2","PUBLIC"]

true

false

<null>

行数:5

常见错误(例如尝试将角色授予已被授予该角色的用户)将导致通知。在 Neo4j 的未来主要版本中,某些通知可能会被错误所取代。有关通知的详细信息,请参阅 状态码 → 通知代码

从用户中撤销角色

可以使用 REVOKE ROLE 撤销用户的角色来撤销用户的访问权限

REVOKE ROLE myrole FROM bob

从用户中撤销的角色将不再出现在 SHOW USERS 提供的列表中

SHOW USERS
表 10. 结果
用户 角色 passwordChangeRequired 已暂停 主页

"bob"

["PUBLIC"]

false

false

<null>

"neo4j"

["admin","PUBLIC"]

true

false

<null>

"user1"

["role1","role2","PUBLIC"]

true

false

<null>

"user2"

["role1","role2","PUBLIC"]

true

false

<null>

"user3"

["role1","role2","PUBLIC"]

true

false

<null>

行数:5

可以在一个命令中从多个用户中撤销多个角色

REVOKE ROLES role1, role2 FROM user1, user2, user3

常见错误(例如拼写错误或尝试从未被授予该角色的用户中撤销角色)将导致通知。在 Neo4j 的未来主要版本中,某些通知可能会被错误所取代。有关通知的详细信息,请参阅 状态码 → 通知代码

删除角色

可以使用 DROP ROLE 命令删除角色

DROP ROLE mythirdrole

删除角色后,它将不再出现在 SHOW ROLES 提供的列表中

SHOW ROLES
表 11. 结果
角色

"PUBLIC"

"admin"

"architect"

"editor"

"myrole"

"publisher"

"reader"

行数:8

该命令是可选的幂等命令,默认行为是在角色不存在的情况下抛出异常。将 IF EXISTS 添加到命令将确保如果角色不存在,则不会抛出异常,并且不会发生任何操作

DROP ROLE mythirdrole IF EXISTS