管理用户
用户可以使用针对 system
数据库执行的一组 Cypher 管理命令创建和管理。当通过 bolt
连接到 DBMS 时,管理命令会自动路由到 system
数据库。
用户状态
system
数据库中有两种类型的用户状态
ACTIVE
状态-
(新用户的默认状态)用户可以登录 Neo4j 并根据其权限执行查询。
SUSPENDED
状态 企业版-
-
对系统图进行身份验证和授权的本机用户无法登录 Neo4j。如果在使用 Neo4j 时被暂停,他们将失去所有分配的角色及其权限,包括
PUBLIC
角色,直到重新激活。 -
即使用户通过外部 ID 提供程序(例如 LDAP)进行身份验证和授权,他们仍然可以登录。如果在使用 Neo4j 时被暂停,他们将保留由外部提供程序分配的角色和权限,包括
PUBLIC
角色。要阻止任何这些操作,您需要使用其身份提供程序的机制。
-
用户管理命令语法
有关语法描述的更多详细信息,请参阅管理命令的 Cypher 语法。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
无 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
命令 |
|
语法 |
|
描述 |
更改用户名称。 有关更多信息,请参阅重命名用户。 |
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
更改当前用户的密码。 有关更多信息,请参阅更改当前用户的密码。 |
所需权限 |
无 |
命令 |
|
语法 |
|
描述 |
删除现有用户。 有关更多信息,请参阅删除用户。 |
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
|
列出当前用户
您可以使用 Cypher 命令SHOW CURRENT USER
查看当前登录的用户。它会生成一个包含以下列的表格
列 | 描述 | 类型 | 社区版 | 企业版 |
---|---|---|---|---|
user |
用户名 |
|
||
roles |
授予用户的角色。 在社区版中返回 |
|
||
passwordChangeRequired |
如果为 |
|
||
suspended |
如果为 在社区版中返回 |
|
||
home |
用户配置的主数据库,如果未配置主数据库,则为 在社区版中返回 |
|
SHOW CURRENT USER
user | roles | passwordChangeRequired | suspended | home |
---|---|---|---|---|
|
|
|
|
|
行数:1 |
此命令仅支持已登录的用户,如果已禁用授权,则返回空结果。 |
列出用户
您可以使用 Cypher 命令SHOW USERS
列出所有可用用户。它会生成一个表,每个用户一行,包含以下列
列 | 描述 | 类型 | 社区版 | 企业版 |
---|---|---|---|---|
user |
用户名 |
|
||
roles |
使用 用户在实践中获得的角色集可能与本列中的角色集不同。这取决于 DMBS 配置和用户的身份验证提供程序。 例如,如果他们使用外部(例如 LDAP 或 OIDC)身份验证,或者如果 在社区版中返回 |
|
||
passwordChangeRequired |
如果为 |
|
||
suspended |
如果为 在社区版中返回 |
|
||
home |
为用户配置的主数据库,否则为 在社区版中返回 |
|
首次启动 Neo4j DBMS 时,始终只有一个具有管理员权限的默认用户 |
SHOW USERS
user | roles | passwordChangeRequired | suspended | home |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行数:2 |
此示例演示如何
-
使用
YIELD
子句重新排序列。 -
使用
WHERE
子句过滤结果。
SHOW USER YIELD user, suspended, passwordChangeRequired, roles, home
WHERE user = 'jake'
user | suspended | passwordChangeRequired | roles | 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 |
包含用户配置的映射。例如,LDAP 身份验证提供程序的用户 dn、OIDC 身份验证提供程序的唯一外部标识符或本机身份验证提供程序的密码状态。 |
|
SHOW USERS WITH AUTH
user | roles | passwordChangeRequired | suspended | home | provider | auth |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数:3 |
显示所有具有oidc
身份验证提供程序的用户。
SHOW USERS WITH AUTH
WHERE provider = 'oidc1'
user | roles | passwordChangeRequired | suspended | home | provider | auth |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
行数: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 个字符。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 | 在 5.24 中引入可以使用一个或多个SET AUTH 子句配置外部身份验证提供程序,例如 LDAP 或 OIDC,这些提供程序为该用户定义身份验证/授权提供程序。SET AUTH 也可以用作设置本机(基于密码)身份验证设置(如SET PASSWORD 和SET PASSWORD CHANGE REQUIRED )的替代方法。有关更多信息,请参阅本节中的示例,以及使用身份验证提供程序在用户级别配置 SSO(适用于 OIDC)和使用身份验证提供程序在用户级别配置身份验证/授权(适用于 LDAP)。
|
用户名区分大小写。创建的用户将出现在
|
例如,您可以使用以下命令创建处于暂停状态、主数据库为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}
或者,您可以使用以下命令创建处于活动状态、使用加密密码(取自数据库备份的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
}
命令的 |
CREATE USER
命令可以选择性地幂等,默认行为是在用户已存在时抛出异常。将 IF NOT EXISTS
附加到 CREATE USER
命令将确保不会抛出异常,并且如果用户已存在则不会发生任何事情。
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'}
|
重命名用户
可以使用 RENAME USER
命令重命名用户。
RENAME USER jake TO bob
要验证更改,可以使用 SHOW USERS
命令
SHOW USERS
user | roles | passwordChangeRequired | suspended | home |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行数:2 |
|
修改用户
可以使用 ALTER USER
命令修改用户。该命令允许您更改用户的密码、状态、主数据库和身份验证提供程序设置。SET
和 REMOVE
子句可以按任意顺序应用。但是,所有 REMOVE
子句必须位于第一个 SET
子句之前,并且命令至少需要一个 SET
或 REMOVE
子句。如果省略任何 SET
或 REMOVE
子句,则相应的设置将不会更改。
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 个字符。PLAINTEXT 和ENCRYPTED 关键字是可选的,可用于指定密码的格式,即 Neo4j 是否需要对其进行哈希或它是否已被哈希。默认情况下,所有密码在存储到 Neo4j system 数据库中时都会被加密(哈希)。
|
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 PASSWORD 和 SET PASSWORD CHANGE REQUIRED )的替代方法。有关更多信息,请参阅本节中的示例,以及 使用身份验证提供程序在用户级别配置 SSO 和 使用身份验证提供程序在用户级别配置身份验证/授权。
|
例如,您可以通过设置新密码和活动状态以及删除更改其密码的要求来修改用户 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
例如,您可以修改用户 bob
以使其当前密码过期,以便他必须在下一次登录时更改它
ALTER USER bob
SET PASSWORD CHANGE REQUIRED
使用身份验证提供程序语法的等效命令为
ALTER USER bob SET AUTH 'native' {SET PASSWORD CHANGE REQUIRED}
例如,您可以通过删除用户的原生身份验证提供程序并添加外部 OIDC 身份验证提供程序来修改用户 bob
ALTER USER bob
REMOVE AUTH 'native'
SET AUTH 'oidc-mysso1' {SET ID 'bobsUniqueMySso1Id'}
例如,您可以通过删除用户 bob
的所有现有身份验证提供程序并添加两个外部 OIDC 身份验证提供程序来修改他
ALTER USER bob
REMOVE ALL AUTH
SET AUTH 'oidc-mysso1' {SET ID 'bobsUniqueMySso1Id'}
SET AUTH 'oidc-mysso2' {SET ID 'bobsUniqueMySso2Id'}
例如,您可以通过为用户 bob
分配不同的 home 数据库来修改他
ALTER USER bob
SET HOME DATABASE anotherDbOrAlias
例如,您可以通过删除用户 bob
的 home 数据库并将其状态设置为挂起来修改他
ALTER USER bob
REMOVE HOME DATABASE
SET STATUS SUSPENDED
更改用户时,只需要指定所需的更改即可。例如,省略查询的 |
命令的 |
对用户的更改将显示在 SHOW USERS
提供的列表中
SHOW USERS
user | roles | passwordChangeRequired | suspended | home |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行数:2 |
此命令的默认行为是在用户不存在时抛出异常。向命令添加可选参数 IF EXISTS
使其幂等,并确保不会抛出异常。如果用户不存在,则不会发生任何事情。
ALTER USER nonExistingUser IF EXISTS SET PASSWORD 'abcd1234'