管理角色

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

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

角色管理命令语法

有关语法描述的更多详细信息,请参阅数据库管理命令语法

命令

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

命令

SHOW ROLES WITH USERS

语法

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 PRIVILEGES

语法

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 [IMMUTABLE] ROLE

语法

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

描述

创建新角色。

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

所需权限

GRANT CREATE ROLE

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

命令

CREATE OR REPLACE ROLE

语法

CREATE OR REPLACE ROLE name [AS COPY OF otherName]

描述

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

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

所需权限

GRANT CREATE ROLE
GRANT DROP ROLE

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

命令

RENAME ROLE

语法

RENAME ROLE name [IF EXISTS] TO otherName

描述

更改角色的名称。

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

所需权限

GRANT RENAME ROLE

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

命令

DROP ROLE

语法

DROP ROLE name [IF EXISTS]

描述

移除角色。

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

所需权限

GRANT DROP ROLE

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

命令

GRANT ROLE TO

语法

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

描述

将角色分配给用户。

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

所需权限

GRANT ASSIGN ROLE

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

命令

REVOKE ROLE

语法

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

描述

从用户移除角色。

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

所需权限

GRANT REMOVE ROLE

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

列出角色

您可以使用 Cypher 命令 SHOW ROLES 查看所有可用角色,该命令默认返回单个列。或者,您也可以使用 SHOW ROLES YIELD * 来查看角色是否不可变。有关更多信息,请参阅不可变角色

表 1. SHOW ROLES 输出
描述 类型

role

角色名称

STRING

immutable

如果角色不可变,则为 true,否则为 false

BOOLEAN

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

这与 SHOW ALL ROLES 命令相同。

表 2. 结果
role

"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 输出
描述 类型

member

用户名

STRING

由于这会为每个用户返回一行结果,因此如果一个角色分配给两个用户,它会显示两次。

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

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

表 4. 结果
role member

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

"editor"

"publisher"

"reader"

行数:3

创建角色

可以使用 CREATE [IMMUTABLE] ROLE 创建角色

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

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

CREATE OR REPLACE [IMMUTABLE] ROLE name [AS COPY OF otherName]

适用以下命名规则

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

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

  • 角色名称区分大小写。

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

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

创建的角色将显示在 SHOW ROLES 提供的列表中。

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

"PUBLIC"

"admin"

"architect"

"editor"

"myrole"

"mysecondrole"

"publisher"

"reader"

行数:8

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

示例 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

不可变角色

不可变角色是那些不能以通常方式修改的角色。这意味着在正常操作条件下,它们不能被创建、重命名、删除或被授予/撤销权限。有关 IMMUTABLE 关键字何时以及如何使用的详细信息,请参阅不可变角色和权限

它们在需要一个永久内置系统角色的情况下非常有用,该角色即使拥有角色管理权限的用户也无法修改,但仍然可以像普通角色一样授予和撤销用户。

重命名角色

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

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

"PUBLIC"

"admin"

"architect"

"editor"

"myrole"

"mythirdrole"

"publisher"

"reader"

行数:8

RENAME ROLE 命令仅在使用原生认证和授权时可用。

将角色分配给用户

可以通过使用 GRANT ROLE 为用户分配角色来赋予他们访问权限

GRANT ROLE myrole TO bob

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

SHOW USERS
表 8. 结果
user roles passwordChangeRequired suspended home

"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. 结果
user roles passwordChangeRequired suspended home

"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. 结果
user roles passwordChangeRequired suspended home

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

"PUBLIC"

"admin"

"architect"

"editor"

"myrole"

"publisher"

"reader"

行数:8

此命令是可选幂等的,默认行为是如果角色不存在则抛出异常。在命令中添加 IF EXISTS 将确保如果角色不存在,则不会抛出异常,也不会发生任何事情。

DROP ROLE mythirdrole IF EXISTS
© . All rights reserved.