管理用户
可以使用一组针对 system
数据库执行的 Cypher 管理命令来创建和管理用户。当通过 bolt
连接到数据库管理系统 (DBMS) 时,管理命令会自动路由到 system
数据库。
用户状态
system
数据库中有两种用户状态
ACTIVE
状态-
(新用户的默认状态)用户可以登录 Neo4j 并根据其权限执行查询。
SUSPENDED
状态 企业版-
-
针对系统图进行认证和授权的本机用户无法登录 Neo4j。如果在使用 Neo4j 时被暂停,他们将失去所有分配的角色及其权限,包括
PUBLIC
角色,直到重新激活。 -
针对外部 ID 提供者(例如 LDAP)进行认证和授权的用户仍然可以登录。如果在使用 Neo4j 时被暂停,他们会保留外部提供者分配的角色和权限,包括
PUBLIC
角色。要阻止这些情况,您需要使用其身份提供者的机制。
-
用户管理命令语法
有关语法描述的更多详细信息,请参阅数据库管理命令语法。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
无 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
列出授予指定用户或(如果未指定用户)当前用户的权限。 使用
|
所需权限 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
命令 |
|
语法 |
|
描述 |
更改用户的名称。 有关更多信息,请参阅重命名用户。 |
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
|
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
命令 |
|
语法 |
|
描述 |
更改当前用户的密码。 有关更多信息,请参阅更改当前用户的密码。 |
所需权限 |
无 |
命令 |
|
语法 |
|
描述 |
删除现有用户。 有关更多信息,请参阅删除用户。 |
所需权限 |
有关更多信息,请参阅DBMS 用户管理权限。 |
|
列出当前用户
您可以使用 Cypher 命令 SHOW CURRENT USER
查看当前登录的用户。它会生成一个包含以下列的表格
列 | 描述 | 类型 | 社区版 | 企业版 |
---|---|---|---|---|
用户 |
用户名 |
|
||
角色 |
授予用户的角色。 在社区版中返回 |
|
||
要求更改密码 |
如果为 |
|
||
已暂停 |
如果为 在社区版中返回 |
|
||
主数据库 |
用户配置的主数据库,如果未配置主数据库,则为 在社区版中返回 |
|
SHOW CURRENT USER
用户 | 角色 | 要求更改密码 | 已暂停 | 主数据库 |
---|---|---|---|---|
|
|
|
|
|
行数: 1 |
此命令仅支持已登录的用户,如果已禁用授权,则返回空结果。 |
列出用户
您可以使用 Cypher 命令 SHOW USERS
列出所有可用用户。它会生成一个表格,其中每位用户一行,包含以下列
列 | 描述 | 类型 | 社区版 | 企业版 |
---|---|---|---|---|
用户 |
用户名 |
|
||
角色 |
使用 用户实际获得的角色集可能与此列中的角色集不同。这取决于数据库管理系统 (DBMS) 配置和用户的认证提供者。 例如,如果他们使用外部认证(例如 LDAP 或 OIDC),或者如果 在社区版中返回 |
|
||
要求更改密码 |
如果为 |
|
||
已暂停 |
如果为 在社区版中返回 |
|
||
主数据库 |
为用户配置的主数据库,否则为 在社区版中返回 |
|
首次启动 Neo4j DBMS 时,总会有一个具有管理权限的默认用户 |
SHOW USERS
用户 | 角色 | 要求更改密码 | 已暂停 | 主数据库 |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行数: 2 |
本示例展示了如何
-
使用
YIELD
子句重新排序列。 -
使用
WHERE
子句过滤结果。
SHOW USER YIELD user, suspended, passwordChangeRequired, roles, home
WHERE user = 'jake'
用户 | 已暂停 | 要求更改密码 | 角色 | 主数据库 |
---|---|---|---|---|
|
|
|
|
|
行数: 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
输出的列外,还包含以下两列
列 | 描述 | 类型 | 社区版 | 企业版 |
---|---|---|---|---|
提供者 |
认证提供者的名称。 |
|
||
认证 |
包含用户配置的映射。例如, |
|
SHOW USERS WITH AUTH
用户 | 角色 | 要求更改密码 | 已暂停 | 主数据库 | 提供者 | 认证 |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
行数: 3 |
显示所有使用 oidc
认证提供者的用户。
SHOW USERS WITH AUTH
WHERE provider = 'oidc1'
用户 | 角色 | 要求更改密码 | 已暂停 | 主数据库 | 提供者 | 认证 |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
行数: 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 前缀仅在其直接跟随 SET PASSWORD 'password' 子句且不属于 SET AUTH 子句时才是可选的。 |
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/databases/databasename/tools/metadata_script.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
命令是可选幂等的,默认行为是如果用户已存在则抛出异常。将 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
用户 | 角色 | 要求更改密码 | 已暂停 | 主数据库 |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行数: 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 | 删除用户的主数据库。因此,DBMS 默认数据库将用作该用户的主数据库。 |
3 | 从用户中移除一个、多个或所有现有认证提供者。但是,用户必须始终至少有一个认证提供者。因此,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 | 一个或多个 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}
例如,您可以修改用户 bob
,移除其本机认证提供者并添加一个外部 OIDC 认证提供者
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
分配不同的主数据库来修改他
ALTER USER bob
SET HOME DATABASE anotherDbOrAlias
例如,您可以通过移除用户 bob
的主数据库并将其状态设置为暂停来修改他
ALTER USER bob
REMOVE HOME DATABASE
SET STATUS SUSPENDED
修改用户时,只需指定所需的更改。例如,省略查询中 |
命令中的 |
对用户的更改将显示在 SHOW USERS
提供的列表中
SHOW USERS
用户 | 角色 | 要求更改密码 | 已暂停 | 主数据库 |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
行数: 2 |
此命令的默认行为是如果用户不存在则抛出异常。向命令添加可选参数 IF EXISTS
可使其幂等,并确保不抛出异常。如果用户不存在,则不会发生任何事情。
ALTER USER nonExistingUser IF EXISTS SET PASSWORD 'abcd1234'