管理用户

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

用户状态

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

ACTIVE 状态

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

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

  • 即使用户通过外部 ID 提供程序(例如 LDAP)进行身份验证和授权,他们仍然可以登录。如果在使用 Neo4j 时被暂停,他们将保留由外部提供程序分配的角色和权限,包括PUBLIC角色。要阻止任何这些操作,您需要使用其身份提供程序的机制。

用户管理命令语法

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

命令

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子句是强制性的,不能省略。

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

所需权限

命令

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>}..."}"]... # Introduced in Neo4j 5.24

<key><value>对用于SET AUTH子句可能包括

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

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

命令

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>}..."}"]... # Introduced in Neo4j 5.24

<key><value>对用于SET AUTH子句可能包括

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

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

GRANT DROP USER

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

命令

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>}..."}"]... # Introduced in Neo4j 5.24

<key><value>对用于SET AUTH子句可能包括

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'

描述

更改当前用户的密码。

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

所需权限

命令

DROP USER

语法

DROP USER name [IF EXISTS]

描述

删除现有用户。

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

所需权限

GRANT DROP USER

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

SHOW USER[S] PRIVILEGES命令在列出权限中进行了描述。

列出当前用户

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

描述 类型 社区版 企业版

user

用户名

STRING

roles

授予用户的角色。

在社区版中返回null

LIST OF STRING

passwordChangeRequired

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

BOOLEAN

suspended

如果为true,则用户当前处于暂停状态。

在社区版中返回null

BOOLEAN

home

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

在社区版中返回null

STRING

SHOW CURRENT USER
表 1. 结果
user roles passwordChangeRequired suspended home

"jake"

["PUBLIC"]

false

false

<null>

行数:1

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

列出用户

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

描述 类型 社区版 企业版

user

用户名

STRING

roles

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

用户在实践中获得的角色集可能与本列中的角色集不同。这取决于 DMBS 配置和用户的身份验证提供程序

例如,如果他们使用外部(例如 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 roles 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 roles 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 身份验证提供程序的唯一外部标识符或本机身份验证提供程序的密码状态。

MAP

示例 4. 显示具有身份验证的用户
SHOW USERS WITH AUTH
表 5. 结果
user roles 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 roles passwordChangeRequired suspended home provider auth

"jack"

["PUBLIC"]

false

false

<null>

"oidc1"

{ "id": "jacksIdForOidc1" }

行数:1

创建用户

您可以使用以下 Cypher 命令之一创建用户,具体取决于您是想创建新用户还是替换现有用户。在这两种情况下,您都可以指定用户的密码、他们是否必须在下次登录时更改密码、他们的状态、主数据库和身份验证提供程序设置。SET子句可以按任何顺序应用。必须指定SET PASSWORD和/或至少一个SET AUTH子句,因为用户必须至少有一个身份验证提供程序。SET AUTH从 Neo4j 5.24 开始可用。

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 在 5.24 中引入可以使用一个或多个SET AUTH子句配置外部身份验证提供程序,例如 LDAP 或 OIDC,这些提供程序为该用户定义身份验证/授权提供程序。SET AUTH也可以用作设置本机(基于密码)身份验证设置(如SET PASSWORDSET PASSWORD CHANGE REQUIRED)的替代方法。有关更多信息,请参阅本节中的示例,以及使用身份验证提供程序在用户级别配置 SSO(适用于 OIDC)和使用身份验证提供程序在用户级别配置身份验证/授权(适用于 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. 创建用户

例如,您可以使用以下命令创建处于暂停状态、主数据库为anotherDb且需要更改密码的用户jake

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. 使用加密密码创建用户

或者,您可以使用以下命令创建处于活动状态、使用加密密码(取自数据库备份的data/scripts/databasename/restore_metadata.cypher)且不需要更改密码的用户Jake

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 企业版中可用。但是,可以在 Neo4j 社区版中使用SET AUTH 'native'

CREATE USER 命令可以选择性地幂等,默认行为是在用户已存在时抛出异常。将 IF NOT EXISTS 附加到 CREATE USER 命令将确保不会抛出异常,并且如果用户已存在则不会发生任何事情。

示例 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 roles 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 删除用户的 home 数据库。因此,DBMS 默认数据库将用作该用户的 home 数据库。
3 在 5.24 版本中引入 从用户中删除一个、多个或所有现有的 身份验证提供程序。但是,用户必须始终至少拥有一个身份验证提供程序。因此,必须将 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 前缀直接位于 SET PASSWORD 'password' 子句之后,并且不是 SET AUTH 子句的一部分,则该前缀是可选的。
6 指定用户的状态。
7 为用户指定主数据库。如果主数据库指向数据库或数据库别名,则会解析主数据库。如果未设置主数据库,则 DBMS 默认数据库将用作该用户的主数据库。
8 在 5.24 版本中引入 可以使用一个或多个 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 身份验证提供程序

例如,您可以通过删除用户的原生身份验证提供程序并添加外部 OIDC 身份验证提供程序来修改用户 bob

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. 为用户分配不同的 home 数据库

例如,您可以通过为用户 bob 分配不同的 home 数据库来修改他

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

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

ALTER USER bob
REMOVE HOME DATABASE
SET STATUS SUSPENDED

更改用户时,只需要指定所需的更改即可。例如,省略查询的 CHANGE [NOT] REQUIRED 部分会使其保持不变。

命令的 SET STATUS {ACTIVE | SUSPENDED}SET HOME DATABASEREMOVE HOME DATABASEREMOVE AUTH 部分仅在 Neo4j Enterprise Edition 中可用。外部提供程序的 SET AUTH 子句仅在 Neo4j Enterprise Edition 中可用。但是,SET AUTH 'native' 可用于 Neo4j Community Edition。

对用户的更改将显示在 SHOW USERS 提供的列表中

SHOW USERS
表 8. 结果
user roles 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 roles passwordChangeRequired suspended home

"neo4j"

["admin","PUBLIC"]

true

false

<null>

行数:1