Source: https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/manage-users/ Documentation version: v5.3.2 # 用户管理 使用 [ngctl](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/) 管理悦数图数据库开发版的用户,包括创建用户、修改密码、启用、禁用、解锁和删除用户。 用户身份由 Meta 服务管理;服务组成员、角色和权限由 Graph 服务管理。创建用户后,还需单独[配置访问权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/configure-user-access/)。配套部署使用的服务组名为`default_svcgrp`。 ## 前提条件 悦数图数据库开发版已启动。以下`ngctl`命令均在配套的`ngctl`容器中执行。创建、删除、重置密码等管理操作需以`root`登录 Meta 服务;[修改用户密码](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/manage-users/#change-own-password)无需提前登录。 1. 在开发机终端进入`compose.yaml`所在目录,再进入容器: ```` docker compose exec ngctl sh ```` 2. 执行管理操作时,登录 Meta 服务。将``替换为`root`的当前密码: ```` ngctl auth login -H graph-cluster -P 9559 -u root -p '' ```` 使用实际密码字符;Compose 文件中的`$$`在这里输入单个`$`。更多连接说明见[在 Docker Compose 部署中运行 ngctl](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/#docker-compose)。使用独立安装的工具时,见[登录 Meta 服务](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#log_in_to_meta)。 ## 创建用户 创建用户`user1`并设置密码: ```` ngctl user create user1 --password Passwd123 ```` 成功后返回`Create user successfully.`。新用户默认处于启用状态,但尚未加入服务组。 通过认证信息指定密码 也可以使用以下命令创建同一个用户。两种写法任选一种: ```` ngctl user create user1 --auth-type password --auth-info '{"password":"Passwd123"}' ```` 命令参数见[创建用户](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#create_user)。 ## 允许用户访问服务组 用户创建后,切换到 GQL 客户端,以服务组 Owner(所有者)身份[连接 Graph 服务](https://dev-docs.yueshu.com.cn/v5.3.2/get-started/first-query/#connect)。该用户具有内置角色`ADMIN`。 1. 邀请用户并授予连接权限: ```` ''' INVITE USER user1 ''' ''' GRANT CONNECT TO USER user1 ''' ```` 2. 按[为用户配置访问权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/configure-user-access/)授予角色或资源权限。访问非默认 Schema 需要该 Schema 的`USAGE`;查询图还需要图上的`MATCH`。 3. 使用 [SHOW USERS](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-users/) 确认成员关系,通过 [SHOW ROLES FOR USER](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-roles/) 和 [SHOW PRIVILEGES FOR USER](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-privileges/) 检查授权记录,再以`user1`连接并执行目标操作。 将 Schema 或图设置为用户的主 Schema、主图只会设置登录后的默认选择,不会授予资源访问权限。设置方法见 [INVITE USER](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/invite-user/)。 ## 停止用户访问 根据需要停止的访问范围选择操作: | 目标 | 操作 | 影响 | 阻止到服务组的新连接 | 撤销`CONNECT` | 保留用户和其他权限;现有会话不会自动终止。 | 撤销指定操作权限 | [撤销角色或权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/manage-roles/) | 只移除指定的授权来源。 | 将用户移出服务组 | [REMOVE USER](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/remove-user/) | 移除成员关系及其在服务组中的角色和权限,保留 Meta 用户身份。 | 阻止新的密码登录 | `ngctl user disable` | 保留用户、成员关系和授权;无会话访问需单独停止。 | 永久删除用户 | `ngctl user drop` | 删除 Meta 用户,并将其移出服务组。 撤销`CONNECT`后如需立即终止已有会话,可通过 [SHOW SESSIONS](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-sessions/) 查找会话,再执行 [KILL SESSION](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/kill/kill-session/)。 ## 删除用户 不能删除`root`或服务组 Owner。 删除用户 删除后,用户会从服务组中移除,其成员关系和授权也会删除。需要暂时停止密码登录时,使用[禁用用户](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/manage-users/#_8)。 ```` ngctl user drop user1 ```` 命令参数见[删除用户](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#drop_user)。 ## 密码管理 ### 修改用户密码 使用`ngctl auth passwd`,通过自己的当前密码验证身份,无需提前登录 Meta 服务。新密码至少 8 个字符,包含大写字母、小写字母和数字。 将``、``和``替换为自己的用户名、当前密码和新密码: ```` ngctl auth passwd -H graph-cluster -P 9559 -u '' -c '' -p '' ```` 成功后返回`Change password succeeded.`。忘记当前密码时,请管理员[重置用户密码](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/manage-users/#reset-user-password)。命令参数见[修改用户密码](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#change_meta_password)。 ### 管理员重置用户密码 先按[前提条件](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/manage-users/#_2)以`root`登录 Meta 服务,再使用`ngctl user alter`为指定用户设置新密码,无需提供该用户的旧密码。以下将`user1`的密码重置为`Nebula5678`: ```` ngctl user alter user1 --password Nebula5678 ```` 成功后返回`Alter user successfully.`。 通过认证信息重置密码 以下写法与上面的命令等效,任选一种: ```` ngctl user alter user1 --auth-info '{"password":"Nebula5678"}' ```` 目标用户已被禁用时,先[启用用户](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/manage-users/#_8)再重置密码;如需保持禁用状态,重置后再次禁用。 命令参数见[管理员重置用户密码](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#change_user_password)。 使用上述任一方式修改部署账号`root`的密码时,还需按[修改已有悦数图数据库开发版实例的 root 密码](https://dev-docs.yueshu.com.cn/v5.3.2/get-started/deploy/#change-root-password)同步更新 Compose 配置。 ## 启用或禁用用户 禁用用户,阻止其通过密码认证建立新连接: ```` ngctl user disable user1 ```` 重新启用用户: ```` ngctl user enable user1 ```` 这两项操作不删除成员关系、角色或权限。启用后,用户满足`CONNECT`等访问条件即可重新连接。 无会话访问 无会话模式跳过 Meta 用户认证,仅禁用`sessionless_user`指定的用户无法停止此类访问。停止方法见[关闭无会话模式](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/sessionless/#disable-sessionless)。 命令参数见[禁用用户](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#disable_user)和[启用用户](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#enable_user)。 ## 解锁被锁定的用户 密码登录在指定时间内失败次数过多时,系统会临时锁定用户。锁定规则由 Meta 服务的`max_allowed_login_attempts`、`user_locked_mins`和`user_locked_window_mins`配置控制。 手动解除临时锁定: ```` ngctl user unlock user1 ```` `unlock`清除登录失败导致的锁定,`enable`用于重新启用被禁用的用户。命令参数见[解锁用户](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#unlock_user)。 ## 查看用户 查看全部 Meta 用户: ```` ngctl user show ```` 查看指定用户: ```` ngctl user show user1 ```` 结果中的`Name`为用户名,`Active`为启用状态:`Y`表示已启用,`N`表示已禁用。该结果不包含服务组中的资源授权;查看授权使用 Graph 服务的`SHOW ROLES`和`SHOW PRIVILEGES`。 命令参数见[显示用户](https://dev-docs.yueshu.com.cn/v5.3.2/utilities/ngctl/meta-commands/#show_users)。