Source: https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/configure-user-access/ Documentation version: v5.3.2 # 为用户配置访问权限 将用户加入服务组,再授予连接、Schema 访问和资源操作权限。本页以允许`user1`查询`/finance/transactions`为例,介绍完整授权流程。 ## 前提条件 - 用户已在 Meta 服务中创建、处于启用状态且未被锁定。更多信息,请参见[用户管理](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/manage-users/)。 - 您已使用目标服务组的 Owner(所有者)账号连接 Graph 服务。该账号具有内置角色`ADMIN`。 - 待访问的 Schema 和资源已经存在;示例使用`/finance/transactions`,请按实际路径替换。 Note 如果用户已加入服务组,跳过示例中的`INVITE USER`。本文的角色授权和直接授权两种方式任选一种。 ## 选择直接授权或角色授权 | 方式 | 适用场景 | 后续管理 | 角色授权(推荐) | 多个用户承担相同职责 | 修改角色,统一调整这些用户的权限。 | 直接授权 | 单个用户临时或个别授权 | 单独调整该用户的权限。 用户从直接授权和角色中获得的权限会合并生效。只要其中一个来源仍提供某项权限,用户就仍可执行相应操作。 ## 使用角色配置访问权限 以下操作由具有`ADMIN`角色的用户在 Graph 服务的 GQL 客户端中执行。示例创建角色`finance_reader`;如已有同名角色,请先检查其已有权限。 1. 邀请用户加入当前服务组: ```` INVITE USER user1 ```` 2. 创建用于查询图的角色: ```` CREATE ROLE IF NOT EXISTS finance_reader COMMENT "Read finance graphs" ```` 3. 向角色授予连接权限: ```` GRANT CONNECT TO ROLE finance_reader ```` 4. 授予非默认 Schema 的访问权限和图查询权限: ```` ''' GRANT USAGE ON SCHEMA /finance TO ROLE finance_reader ''' ''' GRANT MATCH ON GRAPH /finance/transactions TO ROLE finance_reader ''' ```` `USAGE`允许用户查看和引用`/finance`,`MATCH`允许用户查询图`transactions`。对于普通用户,查询该图需要同时具有这两个权限。 5. 将角色授予用户: ```` GRANT ROLE finance_reader TO USER user1 ```` 6. 等待权限变更同步后,使用`user1`重新连接,并执行以下语句验证访问权限是否生效: ```` ''' SESSION SET SCHEMA /finance ''' ''' SESSION SET GRAPH transactions ''' ''' MATCH (n) RETURN n LIMIT 1 ''' ```` 查询应成功,最多返回一条点记录。图为空时返回空结果,也表示查询权限检查已通过。 ## 直接向用户授予权限 如果权限只适用于单个用户,可以省略角色并直接授权。例如: 查看直接授权示例 ```` ''' INVITE USER user1 ''' ''' GRANT CONNECT TO USER user1 ''' ''' GRANT USAGE ON SCHEMA /finance TO USER user1 ''' ''' GRANT MATCH ON GRAPH /finance/transactions TO USER user1 ''' ```` 直接授权不会创建自定义角色。使用`SHOW PRIVILEGES FOR USER user1`查询时,直接授权记录的`role`列为空。 ## 常见授权场景 以下示例可分别使用。“只允许连接”包含邀请步骤;其余示例要求用户已加入服务组,且对应的图和 Schema 已存在。 ### 只允许用户连接服务组 查看授权示例 ```` ''' INVITE USER user1 ''' ''' GRANT CONNECT TO USER user1 ''' ```` 此时用户可以建立连接,但没有获得 Schema 中资源的操作权限。 ### 查询默认 Schema 中的图 查看授权示例 ```` ''' CREATE ROLE IF NOT EXISTS movie_reader COMMENT "Read movie graph" ''' ''' GRANT CONNECT TO ROLE movie_reader ''' ''' GRANT MATCH ON GRAPH /default_schema/movie TO ROLE movie_reader ''' ''' GRANT ROLE movie_reader TO USER user1 ''' ```` 所有用户都隐式拥有`/default_schema`的`USAGE`,无需也不能显式授予该权限。 ### 读写指定图 查看授权示例 ```` ''' CREATE ROLE IF NOT EXISTS finance_writer COMMENT "Read and write transactions" ''' ''' GRANT CONNECT TO ROLE finance_writer ''' ''' GRANT USAGE ON SCHEMA /finance TO ROLE finance_writer ''' ''' GRANT MATCH, INSERT, UPDATE, DELETE ON GRAPH /finance/transactions TO ROLE finance_writer ''' ''' GRANT ROLE finance_writer TO USER user1 ''' ```` 仅授予业务需要的操作。例如,只追加数据的用户通常不需要`DELETE`。 ### 访问 Schema 中的所有图 查看授权示例 ```` ''' CREATE ROLE IF NOT EXISTS finance_analyst COMMENT "Read all finance graphs" ''' ''' GRANT CONNECT TO ROLE finance_analyst ''' ''' GRANT USAGE, MATCH ANY GRAPH ON SCHEMA /finance TO ROLE finance_analyst ''' ''' GRANT ROLE finance_analyst TO USER user1 ''' ```` `MATCH ANY GRAPH`允许查询该 Schema 中的所有图,包括以后创建的图。它不会授予写入或管理权限。 ## 撤销访问权限 根据权限来源,可以撤销用户的角色: ```` REVOKE ROLE finance_reader FROM USER user1 ```` 或者撤销角色中的权限: ```` REVOKE MATCH ON GRAPH /finance/transactions FROM ROLE finance_reader ```` 撤销后,以目标用户执行原操作验证结果。如果仍可访问,检查其他角色、直接授权、Owner 身份和上级资源权限是否提供相同权限。 Note 撤销`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/) 终止会话。 ## 更多信息 - [管理角色和权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/manage-roles/) - [Schema 访问控制](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/schema-access-control/) - [授权概述](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/) - [权限参考](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/privilege-reference/) - [GRANT](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/grant-privilege/) 和 [REVOKE](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/revoke-privilege/)