管理用户
可以使用针对 system 数据库执行的一组 Cypher 管理命令来创建和管理用户。通过 bolt 连接到 DBMS 时,管理命令会自动路由到 system 数据库。
用户状态
system 数据库中的用户有两种状态:
ACTIVE(活跃)状态-
(新用户的默认状态)用户可以登录 Neo4j 并根据其权限执行查询。
SUSPENDED(挂起)状态 企业版-
-
针对系统图进行身份验证和授权的本地用户将无法登录 Neo4j。如果在使用 Neo4j 时被挂起,他们将丢失所有已分配的角色及其权限(包括
PUBLIC角色),直到重新激活为止。 -
针对外部身份提供商(例如 LDAP)进行身份验证和授权的用户仍然可以登录。如果在使用 Neo4j 时被挂起,他们将保留由外部提供商分配的角色和权限,包括
PUBLIC角色。要防止这种情况,您需要使用其身份提供商的机制。 -
针对外部身份提供商进行身份验证和授权并设置了 用户身份验证提供商 的用户将无法登录 Neo4j。如果在使用 Neo4j 时被挂起,他们将丢失所有分配的角色及相关权限(包括
PUBLIC角色),直到重新激活为止。
-
用户管理命令语法
|
有关语法描述的更多详细信息,请参阅 数据库管理命令语法。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
None |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
更多信息,请参阅 DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
列出授予指定用户的权限,如果未指定用户,则列出当前用户的权限。 使用
|
所需权限 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
更多信息,请参阅 授予创建用户权限。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
命令 |
|
语法 |
|
描述 |
更改用户名。 更多信息,请参阅 重命名用户。 |
所需权限 |
更多信息,请参阅 DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
更多信息,请参阅 DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
更改当前用户的密码。 更多信息,请参阅 更改当前用户的密码。 |
所需权限 |
None |
命令 |
|
语法 |
|
描述 |
删除现有用户。 更多信息,请参阅 删除用户。 |
所需权限 |
更多信息,请参阅 授予删除用户权限。 |
企业版
|
列出当前用户
您可以使用 Cypher 命令 SHOW CURRENT USER 查看当前登录的用户。它会生成一个包含以下列的表:
| 列 | 描述 | 类型 | 社区版 | 企业版 |
|---|---|---|---|---|
user(用户) |
用户名 |
|
||
角色 |
授予用户的角色。 在社区版中,它返回 |
|
||
passwordChangeRequired |
如果为 |
|
||
suspended |
如果为 在社区版中,它返回 |
|
||
home |
用户配置的主数据库,如果未配置,则为 在社区版中,它返回 |
|
SHOW CURRENT USER
| user(用户) | 角色 | passwordChangeRequired | suspended | home |
|---|---|---|---|---|
|
|
|
|
|
行:1 |
||||
|
此命令仅支持已登录用户;如果禁用了授权,则返回空结果。 |
列出用户
您可以使用 Cypher 命令 SHOW USERS 列出所有可用用户。它会生成一个表,每个用户占一行,包含以下列:
| 列 | 描述 | 类型 | 社区版 | 企业版 |
|---|---|---|---|---|
user(用户) |
用户名 |
|
||
角色 |
使用 用户在实际中拥有的角色集可能与此列中的不同。这取决于 DBMS 配置和用户的 身份验证提供商。 例如,如果他们使用外部(如 LDAP 或 OIDC)身份验证,或者 在社区版中,它返回 |
|
||
passwordChangeRequired |
如果为 |
|
||
suspended |
如果为 在社区版中,它返回 |
|
||
home |
为用户配置的主数据库,否则为 在社区版中,它返回 |
|
|
首次启动 Neo4j DBMS 时,总会有一个默认用户 |
SHOW USERS
| user(用户) | 角色 | passwordChangeRequired | suspended | home |
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行:2 |
||||
此示例展示了如何:
-
使用
YIELD子句对列进行重排序。 -
使用
WHERE子句过滤结果。
SHOW USER YIELD user, suspended, passwordChangeRequired, roles, home
WHERE user = 'jake'
| user(用户) | suspended | passwordChangeRequired | 角色 | home |
|---|---|---|---|---|
|
|
|
|
|
行:1 |
||||
RETURN 子句显示用户可以在过滤后添加 RETURN 子句以进一步处理结果。在此示例中,RETURN 子句用于过滤掉 roles 列并将 user 列重命名为 adminUser。
SHOW USERS YIELD roles, user
WHERE 'admin' IN roles
RETURN user AS adminUser
| adminUser |
|---|
|
行:1 |
列出用户身份验证提供商
要检查可用的用户身份验证提供商,请使用 SHOW USERS WITH AUTH。该命令为每个用户的每个身份验证提供商生成一行,并在 SHOW USERS 输出的基础上额外产生以下两列:
| 列 | 描述 | 类型 | 社区版 | 企业版 |
|---|---|---|---|---|
provider |
身份验证提供商的名称。 |
|
||
auth |
包含用户配置的映射。例如, |
|
SHOW USERS WITH AUTH
| user(用户) | 角色 | passwordChangeRequired | suspended | home | provider | auth |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行:3 |
||||||
显示所有使用 oidc 身份验证提供商的用户。
SHOW USERS WITH AUTH
WHERE provider = 'oidc1'
| user(用户) | 角色 | passwordChangeRequired | suspended | home | provider | auth |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
行:1 |
||||||
有关身份验证提供商的更多信息,请参阅 用户身份验证提供商。
创建用户
您可以使用以下任一 Cypher 命令创建用户,具体取决于您是要创建新用户还是替换现有用户。在这两种情况下,您都可以指定用户的密码、是否需要在下次登录时更改密码、状态、主数据库以及身份验证提供商设置。SET 子句可以按任何顺序应用。必须指定 SET PASSWORD 和/或至少一个 SET AUTH 子句,因为用户必须至少拥有一个身份验证提供商。
CREATE USER 语法CREATE USER name [IF NOT EXISTS] (1)
[SET [PLAINTEXT \| ENCRYPTED] PASSWORD 'password'] (2)
[[SET PASSWORD] CHANGE [NOT] REQUIRED] (3)
[SET STATUS {ACTIVE \| SUSPENDED}] (4)
[SET HOME DATABASE name] (5)
[SET AUTH [PROVIDER] 'provider' "{"{SET <key> <value>}..."}"]... (6)
CREATE OR REPLACE USER 语法CREATE OR REPLACE USER name (1)
[SET [PLAINTEXT \| ENCRYPTED] PASSWORD 'password'] (2)
[[SET PASSWORD] CHANGE [NOT] REQUIRED] (3)
[SET STATUS {ACTIVE \| SUSPENDED}] (4)
[SET HOME DATABASE name] (5)
[SET AUTH [PROVIDER] 'provider' "{"{SET <key> <value>}..."}"]... (6)
说明:
| 1 | 指定创建用户的命令。 |
| 2 | 指定用户的密码。'password' 可以是字符串值或默认长度至少为 8 个字符的字符串参数。PLAINTEXT 和 ENCRYPTED 关键字是可选的,可用于指定密码格式,即 Neo4j 是需要对其进行哈希处理,还是密码已经被哈希处理过。默认情况下,所有密码在存储到 Neo4j system 数据库时都会被加密(哈希)。
|
| 3 | 指定用户是否必须在下次登录时更改密码。如果省略可选的 SET PASSWORD CHANGE [NOT] REQUIRED 但提供了密码,则默认为 CHANGE REQUIRED。仅当 CHANGE [NOT] REQUIRED 子句直接跟在 SET PASSWORD 'password' 子句之后且不是 SET AUTH 子句的一部分时,其 SET PASSWORD 前缀才是可选的。 |
| 4 | 指定用户的状态。如果未设置,则默认为 ACTIVE。 |
| 5 | 指定用户的主数据库。如果主数据库指向数据库或数据库别名,则会解析该数据库。成分数据库和分片不支持作为主数据库。如果未设置主数据库,则 DBMS 默认数据库将用作该用户的主数据库。 |
| 6 | 可以使用一个或多个 SET AUTH 子句来配置外部 身份验证提供商(如 LDAP 或 OIDC),这些提供商定义了该用户的身份验证/授权提供商。SET AUTH 也可以作为设置本地(基于密码)身份验证设置(如 SET PASSWORD 和 SET PASSWORD CHANGE REQUIRED)的替代方式。有关详细信息,请参阅本节中的示例,以及 OIDC 的 使用身份验证提供商配置用户级 SSO,和 LDAP 的 使用身份验证提供商配置用户级身份验证/授权。
|
|
用户名区分大小写。创建的用户将出现在
|
例如,您可以创建一个挂起状态的用户 jake,其主数据库为 anotherDb,并要求其更改密码:
CREATE USER jake
SET PASSWORD 'abcd1234' CHANGE REQUIRED
SET STATUS SUSPENDED
SET HOME DATABASE anotherDb
使用 身份验证提供商 语法的等效命令为:
CREATE USER jake
SET STATUS SUSPENDED
SET HOME DATABASE anotherDb
SET AUTH 'native' {SET PASSWORD 'abcd1234' SET PASSWORD CHANGE REQUIRED}
或者,您可以创建一个处于活跃状态的用户 Jake,使用加密密码(取自还原数据库备份的 /data/scripts/databasename/restore_metadata.cypher 文件),并要求其不更改密码:
CREATE USER Jake
SET ENCRYPTED PASSWORD '1,6d57a5e0b3317055454e455f96c98c750c77fb371f3f0634a1b8ff2a55c5b825,190ae47c661e0668a0c8be8a21ff78a4a34cdf918cae3c407e907b73932bd16c' CHANGE NOT REQUIRED
SET STATUS ACTIVE
使用 身份验证提供商 语法的等效命令为:.
CREATE USER jake
SET STATUS ACTIVE
SET AUTH 'native' {
SET ENCRYPTED PASSWORD '1,6d57a5e0b3317055454e455f96c98c750c77fb371f3f0634a1b8ff2a55c5b825,190ae47c661e0668a0c8be8a21ff78a4a34cdf918cae3c407e907b73932bd16c'
SET PASSWORD CHANGE NOT REQUIRED
}
企业版
命令中的 |
CREATE USER 命令是可选幂等的,默认行为是如果用户已存在则抛出异常。在 CREATE USER 命令后追加 IF NOT EXISTS 将确保如果用户已存在,则不会抛出异常且不执行任何操作。
CREATE USER jake IF NOT EXISTS
SET PLAINTEXT PASSWORD 'abcd1234'
使用 身份验证提供商 语法的等效命令为:
CREATE USER jake IF NOT EXISTS
SET AUTH 'native' {SET PLAINTEXT PASSWORD 'abcd1234'}
CREATE OR REPLACE USER 命令将导致删除现有用户并创建一个新用户。
CREATE OR REPLACE USER jake
SET PLAINTEXT PASSWORD 'abcd1234'
这等同于运行 DROP USER jake IF EXISTS,然后运行 CREATE USER jake SET PASSWORD 'abcd1234'。
使用 身份验证提供商 语法的等效命令为:
CREATE OR REPLACE USER jake
SET AUTH 'native' {SET PLAINTEXT PASSWORD 'abcd1234'}
|
|