管理用户

可以使用针对 system 数据库执行的一组 Cypher 管理命令来创建和管理用户。通过 bolt 连接到 DBMS 时,管理命令会自动路由到 system 数据库。

用户状态

system 数据库中的用户有两种状态:

ACTIVE(活跃)状态

(新用户的默认状态)用户可以登录 Neo4j 并根据其权限执行查询。

SUSPENDED(挂起)状态 企业版
  • 针对系统图进行身份验证和授权的本地用户将无法登录 Neo4j。如果在使用 Neo4j 时被挂起,他们将丢失所有已分配的角色及其权限(包括 PUBLIC 角色),直到重新激活为止。

  • 针对外部身份提供商(例如 LDAP)进行身份验证和授权的用户仍然可以登录。如果在使用 Neo4j 时被挂起,他们将保留由外部提供商分配的角色和权限,包括 PUBLIC 角色。要防止这种情况,您需要使用其身份提供商的机制。

  • 针对外部身份提供商进行身份验证和授权并设置了 用户身份验证提供商 的用户将无法登录 Neo4j。如果在使用 Neo4j 时被挂起,他们将丢失所有分配的角色及相关权限(包括 PUBLIC 角色),直到重新激活为止。

用户管理命令语法

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

命令

SHOW CURRENT USER

语法

SHOW CURRENT USER
  [YIELD { * | field[, ...] } [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]
  [WHERE expression]
  [RETURN field[, ...] [ORDER BY field[, ...]] [SKIP n] [LIMIT n]]

描述

列出当前用户。

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

更多信息,请参阅 列出当前用户

所需权限

None

命令

SHOW USERS

语法

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

描述

列出所有用户。

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

更多信息,请参阅 列出用户

所需权限

GRANT SHOW USER

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

命令

SHOW USER PRIVILEGES

语法

SHOW USER[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 USER name PRIVILEGES 命令在 列出权限 中有说明。

所需权限

GRANT SHOW PRIVILEGE

更多信息,请参阅 DBMS 权限管理权限

GRANT SHOW USER

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

命令

CREATE USER

语法

CREATE USER name [IF NOT EXISTS]
  [SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password']
  [[SET PASSWORD] CHANGE [NOT] REQUIRED]
  [SET STATUS {ACTIVE | SUSPENDED}]
  [SET HOME DATABASE name]
  [SET AUTH [PROVIDER] 'provider' "{"{SET <key> <value>}..."}"]...

SET AUTH 子句的 <key><value> 对可以包括:

SET AUTH [PROVIDER] 'provider' "{"
    {
        SET ID 'id' # a unique identifier of the user in an external system
        | SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password' # only applicable to the 'native' provider
        | SET PASSWORD CHANGE [NOT] REQUIRED # only applicable to the 'native' provider
    }
"}"

描述

创建一个新用户。

必须指定 SET PASSWORD 和/或至少一个 SET AUTH 子句,因为用户必须至少拥有一个身份验证提供商。

更多信息,请参阅 创建用户

所需权限

GRANT CREATE USER

更多信息,请参阅 授予创建用户权限

命令

CREATE OR REPLACE USER

语法

CREATE OR REPLACE USER name
  [SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password']
  [[SET PASSWORD] CHANGE [NOT] REQUIRED]
  [SET STATUS {ACTIVE | SUSPENDED}]
  [SET HOME DATABASE name]
  [SET AUTH [PROVIDER] 'provider' "{"{SET <key> <value>}..."}"]...

SET AUTH 子句的 <key><value> 对可以包括:

SET AUTH [PROVIDER] 'provider' "{"
    {
        SET ID 'id' # a unique identifier of the user in an external system
        | SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password' # only applicable to the 'native' provider
        | SET PASSWORD CHANGE [NOT] REQUIRED # only applicable to the 'native' provider
    }
"}"

描述

创建一个新用户;如果同名用户已存在,则替换它。

必须指定 SET PASSWORD 和/或至少一个 SET AUTH 子句,因为用户必须至少拥有一个身份验证提供商。

更多信息,请参阅 创建用户

所需权限

GRANT CREATE USER

更多信息,请参阅 授予创建用户权限

GRANT DROP USER

更多信息,请参阅 授予删除用户权限

命令

RENAME USER

语法

RENAME USER name [IF EXISTS] TO otherName

描述

更改用户名。

更多信息,请参阅 重命名用户

所需权限

GRANT RENAME USER

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

命令

ALTER USER

语法

ALTER USER name [IF EXISTS]
  [REMOVE HOME DATABASE]
  [REMOVE { AUTH [PROVIDER[S]] provider[, ...] | ALL AUTH [PROVIDER[S]] }]...
  [SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password']
  [[SET PASSWORD] CHANGE [NOT] REQUIRED]
  [SET STATUS {ACTIVE | SUSPENDED} ]
  [SET HOME DATABASE name]
  [SET AUTH [PROVIDER] 'provider' "{"{SET <key> <value>}..."}"]...

SET AUTH 子句的 <key><value> 对可以包括:

SET AUTH [PROVIDER] 'provider' "{"
    {
        SET ID 'id' # a unique identifier of the user in an external system
        | SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password' # PASSWORD clauses are only applicable to the 'native' provider
        | SET PASSWORD CHANGE [NOT] REQUIRED # PASSWORD clauses are only applicable to the 'native' provider
    }
"}"

描述

修改现有用户的设置。

  • 至少需要一个 SETREMOVE 子句。

  • 任何 REMOVE 子句必须出现在第一个 SET 子句之前。

更多信息,请参阅 修改用户

所需权限

GRANT SET PASSWORD
GRANT SET USER STATUS
GRANT SET USER HOME DATABASE
GRANT SET AUTH

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

命令

ALTER CURRENT USER SET PASSWORD

语法

ALTER CURRENT USER SET PASSWORD FROM 'oldPassword' TO 'newPassword'

描述

更改当前用户的密码。

更多信息,请参阅 更改当前用户的密码

所需权限

None

命令

DROP USER

语法

DROP USER name [IF EXISTS]

描述

删除现有用户。

更多信息,请参阅 删除用户

所需权限

GRANT DROP USER

更多信息,请参阅 授予删除用户权限

SHOW USER[S] PRIVILEGES 命令在 列出权限 中有说明。

列出当前用户

您可以使用 Cypher 命令 SHOW CURRENT USER 查看当前登录的用户。它会生成一个包含以下列的表:

描述 类型 社区版 企业版

user(用户)

用户名

STRING

角色

授予用户的角色。

在社区版中,它返回 null

字符串列表 (LIST OF STRING)

passwordChangeRequired

如果为 true,用户必须在下次登录时更改密码。如果禁用了 native 身份验证,则此项为 null

布尔值 (BOOLEAN)

suspended

如果为 true,则表示用户当前处于挂起状态。

在社区版中,它返回 null

布尔值 (BOOLEAN)

home

用户配置的主数据库,如果未配置,则为 null。如果此数据库不可用且用户未指定要使用的数据库,他们将无法登录。

在社区版中,它返回 null

STRING

SHOW CURRENT USER
表 1. 结果
user(用户) 角色 passwordChangeRequired suspended home

"jake"

["PUBLIC"]

false

false

<null>

行:1

此命令仅支持已登录用户;如果禁用了授权,则返回空结果。

列出用户

您可以使用 Cypher 命令 SHOW USERS 列出所有可用用户。它会生成一个表,每个用户占一行,包含以下列:

描述 类型 社区版 企业版

user(用户)

用户名

STRING

角色

使用 GRANT ROLE 命令授予用户的本地角色。

用户在实际中拥有的角色集可能与此列中的不同。这取决于 DBMS 配置和用户的 身份验证提供商

例如,如果他们使用外部(如 LDAP 或 OIDC)身份验证,或者 native 未在 dbms.security.authorization_providers 配置设置中列出。

在社区版中,它返回 null

字符串列表 (LIST OF STRING)

passwordChangeRequired

如果为 true,用户必须在下次登录时更改密码。如果禁用了 native 身份验证,则此项为 null

布尔值 (BOOLEAN)

suspended

如果为 true,则表示用户当前处于挂起状态。

在社区版中,它返回 null

布尔值 (BOOLEAN)

home

为用户配置的主数据库,否则为 null。如果主数据库指向数据库或数据库别名,则会解析该数据库。成分数据库、图分片或属性分片不支持作为主数据库。如果配置的主数据库不可用且用户未指定其他数据库,则登录将失败。

在社区版中,它返回 null

STRING

首次启动 Neo4j DBMS 时,总会有一个默认用户 neo4j,拥有管理权限。可以使用 neo4j-admin dbms set-initial-password <password> 设置初始密码,否则您必须在首次登录后更改密码。

示例 1. 显示用户
SHOW USERS
表 2. 结果
user(用户) 角色 passwordChangeRequired suspended home

"neo4j"

["admin","PUBLIC"]

false

false

<null>

"jake"

["PUBLIC"]

false

false

<null>

行:2

示例 2. 显示用户,包含列重排序和过滤

此示例展示了如何:

  • 使用 YIELD 子句对列进行重排序。

  • 使用 WHERE 子句过滤结果。

SHOW USER YIELD user, suspended, passwordChangeRequired, roles, home
WHERE user = 'jake'
表 3. 结果
user(用户) suspended passwordChangeRequired 角色 home

"jake"

false

false

["PUBLIC"]

<null>

行:1

示例 3. 使用 RETURN 子句显示用户

可以在过滤后添加 RETURN 子句以进一步处理结果。在此示例中,RETURN 子句用于过滤掉 roles 列并将 user 列重命名为 adminUser

SHOW USERS YIELD roles, user
WHERE 'admin' IN roles
RETURN user AS adminUser
表 4. 结果
adminUser

"neo4j"

行:1

列出用户身份验证提供商

要检查可用的用户身份验证提供商,请使用 SHOW USERS WITH AUTH。该命令为每个用户的每个身份验证提供商生成一行,并在 SHOW USERS 输出的基础上额外产生以下两列:

描述 类型 社区版 企业版

provider

身份验证提供商的名称。

STRING

auth

包含用户配置的映射。例如,ldap 身份验证提供商的用户 DN、oidc 身份验证提供商的唯一外部标识符或 native 身份验证提供商的密码状态。

MAP

示例 4. 显示带有身份验证的用户
SHOW USERS WITH AUTH
表 5. 结果
user(用户) 角色 passwordChangeRequired suspended home provider auth

"neo4j"

["admin","PUBLIC"]

false

false

<null>

"native"

{ "password": "***", "changeRequired": false }

"jack"

["PUBLIC"]

false

false

<null>

"native"

{ "password": "***", "changeRequired": false }

"jack"

["PUBLIC"]

false

false

<null>

"oidc1"

{ "id": "jacksIdForOidc1" }

行:3

示例 5. 使用过滤显示带有身份验证的用户

显示所有使用 oidc 身份验证提供商的用户。

SHOW USERS WITH AUTH
WHERE provider = 'oidc1'
表 6. 结果
user(用户) 角色 passwordChangeRequired suspended home provider auth

"jack"

["PUBLIC"]

false

false

<null>

"oidc1"

{ "id": "jacksIdForOidc1" }

行: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 个字符的字符串参数。
PLAINTEXTENCRYPTED 关键字是可选的,可用于指定密码格式,即 Neo4j 是需要对其进行哈希处理,还是密码已经被哈希处理过。默认情况下,所有密码在存储到 Neo4j system 数据库时都会被加密(哈希)。
  • SET PLAINTEXT PASSWORD 中的可选 PLAINTEXTSET PASSWORD 的行为相同。

  • 可选的 ENCRYPTED 用于在不知道明文密码但可从还原数据库备份的 /data/scripts/databasename/restore_metadata.cypher 文件中获取加密密码时,重新创建现有用户。请参阅 还原用户和角色元数据
    使用 ENCRYPTED 时,密码字符串应采用 <encryption-version>,<hash>,<salt> 格式,其中例如:

    • 0 是第一个版本,指代迭代次数为 1SHA-256 加密哈希函数。

    • 1 是第二个版本,指代迭代次数为 1024SHA-256 加密哈希函数。

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 PASSWORDSET PASSWORD CHANGE REQUIRED)的替代方式。有关详细信息,请参阅本节中的示例,以及 OIDC 的 使用身份验证提供商配置用户级 SSO,和 LDAP 的 使用身份验证提供商配置用户级身份验证/授权
SET AUTH [PROVIDER] 'provider' "{"
    {
        SET ID 'id' # a unique identifier of the user in an external system.
        \| SET [PLAINTEXT \| ENCRYPTED] PASSWORD 'password' # only applicable to the 'native' provider.
        \| SET PASSWORD CHANGE [NOT] REQUIRED # only applicable to the 'native' provider.
    }
"}"

用户名区分大小写。创建的用户将出现在 SHOW USERS 提供的列表中。

  • 在 Neo4j 社区版中,没有角色,但所有用户都拥有隐含的管理员权限。

  • 在 Neo4j 企业版中,所有用户都会自动分配 PUBLIC 角色,从而获得基础权限集。

示例 6. 创建用户

例如,您可以创建一个挂起状态的用户 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}
示例 7. 创建带有加密密码的用户

或者,您可以创建一个处于活跃状态的用户 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
}

命令中的 SET STATUS {ACTIVE | SUSPENDED}SET HOME DATABASE 部分仅在 Neo4j 企业版中可用。用于外部提供商的 SET AUTH 子句仅在 Neo4j 企业版中可用。但是,SET AUTH 'native' 可在 Neo4j 社区版中使用。

CREATE USER 命令是可选幂等的,默认行为是如果用户已存在则抛出异常。在 CREATE USER 命令后追加 IF NOT EXISTS 将确保如果用户已存在,则不会抛出异常且不执行任何操作。

示例 8. 如果不存在则创建用户
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 命令将导致删除现有用户并创建一个新用户。

示例 9. 创建或替换用户
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'}

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

重命名用户

可以使用 RENAME USER 命令重命名用户。

RENAME USER jake TO bob

要验证更改,可以使用 SHOW USERS 命令:

SHOW USERS
表 7. 结果
user(用户) 角色 passwordChangeRequired suspended home

"bob"

["PUBLIC"]

true

false

<null>

"neo4j"

["admin","PUBLIC"]

true

false

<null>

行:2

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

修改用户

您可以使用 ALTER USER 命令修改用户。该命令允许您更改用户的密码、状态、主数据库和身份验证提供商设置。SETREMOVE 子句可以按任何顺序应用。但是,所有 REMOVE 子句必须出现在第一个 SET 子句之前,并且该命令至少需要一个 SETREMOVE 子句。如果省略任何 SETREMOVE 子句,相应的设置将不会更改。

ALTER USER name [IF EXISTS] (1)
  [REMOVE HOME DATABASE] (2)
  [REMOVE { AUTH [PROVIDER[S]] provider[, ...] \| ALL AUTH [PROVIDER[S]] }]... (3)
  [SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password'] (4)
  [[SET PASSWORD] CHANGE [NOT] REQUIRED] (5)
  [SET STATUS {ACTIVE | SUSPENDED}] (6)
  [SET HOME DATABASE name] (7)
  [SET AUTH [PROVIDER] 'provider' "{"{SET <key> <value>}..."}"]... (8)

说明:

1 指定修改用户的命令。
2 删除用户的主数据库。结果是,DBMS 默认数据库将用作该用户的主数据库。
3 从用户处删除一个、多个或所有现有 身份验证提供商。但是,用户必须始终拥有至少一个身份验证提供商。因此,REMOVE ALL AUTH 必须与至少一个 SET AUTH 子句结合使用,以满足此要求。
4 指定用户的密码。'password' 可以是字符串值或默认长度至少为 8 个字符的字符串参数。
PLAINTEXTENCRYPTED 关键字是可选的,可用于指定密码格式,即 Neo4j 是需要对其进行哈希处理,还是密码已经被哈希处理过。默认情况下,所有密码在存储到 Neo4j system 数据库时都会被加密(哈希)。
  • SET PLAINTEXT PASSWORD 中的可选 PLAINTEXTSET PASSWORD 的行为相同。

  • 可选的 ENCRYPTED 用于在不知道明文密码但可从还原数据库备份时 /data/scripts/databasename/restore_metadata.cypher 文件中获取加密密码时,重新创建现有用户。请参阅 还原用户和角色元数据
    使用 ENCRYPTED 时,密码字符串应采用 <encryption-version>,<hash>,<salt> 格式,其中例如:

    • 0 是第一个版本,指代迭代次数为 1SHA-256 加密哈希函数。

    • 1 是第二个版本,指代迭代次数为 1024SHA-256 加密哈希函数。

5 指定用户是否必须在下次登录时更改密码。当为用户添加本地身份验证(通过先删除预先存在的本地身份验证,或者用户最初没有本地身份验证)时,如果省略可选的 SET PASSWORD CHANGE [NOT] REQUIRED,则默认为 CHANGE REQUIRED。仅当 CHANGE [NOT] REQUIRED 子句直接跟在 SET PASSWORD 'password' 子句之后且不是 SET AUTH 子句的一部分时,其 SET PASSWORD 前缀才是可选的。
6 指定用户的状态。
7 指定用户的主数据库。如果主数据库指向数据库或数据库别名,则会解析该数据库。如果未设置主数据库,则 DBMS 默认数据库将用作该用户的主数据库。
8 可以使用一个或多个 SET AUTH 子句来设置 身份验证提供商,这些提供商定义了该用户的身份验证/授权提供商。这可用于配置外部身份验证提供商(如 LDAP 或 OIDC),也可以作为设置本地(基于密码)身份验证设置(如 SET PASSWORDSET PASSWORD CHANGE REQUIRED)的替代方式。有关详细信息,请参阅本节中的示例,以及 配置用户级 SSO配置用户级身份验证/授权
SET AUTH [PROVIDER] 'provider' "{"
    {
        SET ID 'id' # a unique identifier of the user in an external system
        \| SET [PLAINTEXT \| ENCRYPTED] PASSWORD 'password' # only applicable to the 'native' provider
        \| SET PASSWORD CHANGE [NOT] REQUIRED # only applicable to the 'native' provider
    }
"}"
示例 10. 修改用户的密码和状态

例如,您可以修改用户 bob,通过设置新密码和活跃状态,并删除其更改密码的要求:

ALTER USER bob
SET PASSWORD 'abcd5678' CHANGE NOT REQUIRED
SET STATUS ACTIVE

使用 身份验证提供商 语法的等效命令为:

ALTER USER bob
SET AUTH 'native' {SET PASSWORD 'abcd5678' SET PASSWORD CHANGE NOT REQUIRED}
SET STATUS ACTIVE
示例 11. 修改用户以使其当前密码过期

例如,您可以修改用户 bob,使其当前密码过期,从而要求他在下次登录时必须更改密码:

ALTER USER bob
SET PASSWORD CHANGE REQUIRED

使用 身份验证提供商 语法的等效命令为:

ALTER USER bob
SET AUTH 'native' {SET PASSWORD CHANGE REQUIRED}
示例 12. 修改用户以使用外部 OIDC 身份验证提供商

例如,您可以修改用户 bob,通过删除其本地身份验证提供商并添加一个外部 OIDC 身份验证提供商:

ALTER USER bob
REMOVE AUTH 'native'
SET AUTH 'oidc-mysso1' {SET ID 'bobsUniqueMySso1Id'}
示例 13. 修改用户以使用多个外部 OIDC 身份验证提供商

例如,您可以修改用户 bob,通过删除他现有的所有身份验证提供商并添加两个外部 OIDC 身份验证提供商:

ALTER USER bob
REMOVE ALL AUTH
SET AUTH 'oidc-mysso1' {SET ID 'bobsUniqueMySso1Id'}
SET AUTH 'oidc-mysso2' {SET ID 'bobsUniqueMySso2Id'}
示例 14. 为用户分配不同的主数据库

例如,您可以修改用户 bob,为他分配不同的主数据库:

ALTER USER bob
SET HOME DATABASE anotherDbOrAlias
示例 15. 从用户处删除主数据库并将其状态设置为挂起

例如,您可以修改用户 bob,通过删除其主数据库并将状态设置为挂起:

ALTER USER bob
REMOVE HOME DATABASE
SET STATUS SUSPENDED

修改用户时,只需指定所需的更改。例如,在查询中省略 CHANGE [NOT] REQUIRED 部分将保持该设置不变。

命令中的 SET STATUS {ACTIVE | SUSPENDED}SET HOME DATABASEREMOVE HOME DATABASEREMOVE AUTH 部分仅在 Neo4j 企业版中可用。用于外部提供商的 SET AUTH 子句仅在 Neo4j 企业版中可用。但是,SET AUTH 'native' 可在 Neo4j 社区版中使用。

对用户的更改将出现在 SHOW USERS 提供的列表中。

SHOW USERS
表 8. 结果
user(用户) 角色 passwordChangeRequired suspended home

"bob"

["PUBLIC"]

false

false

<null>

"neo4j"

["admin","PUBLIC"]

true

false

<null>

行:2

此命令的默认行为是如果用户不存在则抛出异常。向命令添加可选参数 IF EXISTS 使其具有幂等性,并确保不会抛出异常。如果用户不存在,则不会执行任何操作。

ALTER USER nonExistingUser IF EXISTS SET PASSWORD 'abcd1234'

更改当前用户的密码

用户可以使用 ALTER CURRENT USER SET PASSWORD 更改其密码。除了新密码外,还需要旧密码;两者都可以是字符串值或字符串参数。当用户执行此命令时,它将更改其密码并设置 CHANGE NOT REQUIRED 标志。

ALTER CURRENT USER
SET PASSWORD FROM 'password1' TO 'password2'

此命令仅适用于已登录用户,且在禁用身份验证的情况下无法运行。

删除用户

可以使用 DROP USER 删除用户。

DROP USER bob

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

但是,当用户被删除后,它将不再出现在 SHOW USERS 提供的列表中:

SHOW USERS
表 9. 结果
user(用户) 角色 passwordChangeRequired suspended home

"neo4j"

["admin","PUBLIC"]

true

false

<null>

行:1