Source: https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/grant-privilege/ Documentation version: v5.3.2 # GRANT `GRANT`向当前服务组中的用户或角色授予权限。 ## 前提条件 先[连接 Graph 服务](https://dev-docs.yueshu.com.cn/v5.3.2/get-started/first-query/#connect),在 GQL 客户端中执行命令。 - 要授予权限,您必须是该权限涉及的资源对象的所有者或具有该服务组的`ADMIN`角色的用户。 - 向角色授权时,该角色需已创建。更多信息,请参见 [CREATE ROLE](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/create-role/)。 - 向用户授权时,该用户需已创建并加入当前服务组。更多信息,请参见[创建用户](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authentication/manage-users/#_3)和 [INVITE USER](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/invite-user/)。 ## 限制条件 - 待授予权限的角色不能是角色`ADMIN`。 - 待授予权限的资源对象不能是临时图。 - 不能授予`/default_schema`的`USAGE`。所有用户都已隐式拥有该 Schema 的访问权。 直接权限和角色权限会合并生效。为便于统一管理多个用户,建议优先向角色授权。完整示例请参见[为用户配置访问权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/configure-user-access/)。 具有`ADMIN`角色的用户已经拥有当前服务组中的全部权限。向该用户直接授予普通权限不会扩大其实际访问能力。 ## 语法 语法图BNF grant_privileges_command ```` grant_privileges_command ::= 'GRANT' action (',' action )* ('ON' resource_object_type resource_object_reference (',' resource_object_reference)* )? 'TO' ( ('USER' user_name) | ( 'ROLE' role_name) ) ```` ## 参数 ### `action` 需要授予或撤销的操作。各类资源支持的操作见[可以授予的权限](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/privilege-reference/#_3)。 如果是针对服务组或 Catalog 的操作,可以授予用户或角色,且命令中不需要指定`resource_object_type`或`resource_object_reference`。 ### `resource_object_type` 目标资源类型,可选值为`SCHEMA`、`GRAPH TYPE`、`GRAPH`、`NODE TYPE`、`EDGE TYPE`、`NODE PROPERTY`、`EDGE PROPERTY`和`PROCEDURE`。每种操作适用的资源对象类型请参见[权限参考](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/privilege-reference/)。 更多信息,请参见[资源对象](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/privilege-reference/#_2)。 ### `resource_object_reference` 用于定位目标资源的引用。可使用当前 Schema 中的名称,或带 Schema 路径的引用: | 资源类型 | 当前 Schema 中的写法 | 包含 Schema 路径的写法 | `SCHEMA` | `schema_reference` | `schema_reference` | `GRAPH TYPE`和`GRAPH` | `graph_type_name` `graph_name` | `schema_reference/graph_type_name` `schema_reference/graph_name` | `PROCEDURE` | `procedure_name(parameter_type, ...)` | ``schema_reference/procedure_name`(parameter_type, ...)` | `NODE TYPE`和`EDGE TYPE` | `graph_name.node_type_name` `graph_name.edge_type_name` | `schema_reference/graph_name.node_type_name` `schema_reference/graph_name.edge_type_name` | `NODE PROPERTY`和`EDGE PROPERTY` | `graph_name.node_type_name.node_property_name` `graph_name.edge_type_name.edge_property_name` | `schema_reference/graph_name.node_type_name.node_property_name` `schema_reference/graph_name.edge_type_name.edge_property_name` 如果同名 UDP 存在多个签名,必须指定参数类型。例如: ```` GRANT EXECUTE ON PROCEDURE `/default_schema/ufoo`(INT) TO ROLE role1 ```` - `SCHEMA`对象始终使用`schema_reference`指定。 - 其他对象位于当前 Schema 时可省略 Schema 路径;位于其他 Schema 时,需包含`schema_reference`。设置和查看当前 Schema 见 [SESSION SET SCHEMA](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/sessions/set/) 和 [SHOW CURRENT_SCHEMA](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-admin/show/show-current-schema/)。 - `schema_reference`可以是对应 Schema 所在绝对路径或相对路径。更多信息,请参见 [CREATE SCHEMA](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/ddl/schema/create/#schema_reference)。 ### `user_name` 接收权限的用户名。 ### `role_name` 接收权限的角色名。 ## 示例 - `role1`需已创建,`user1`需已加入服务组。角色创建方法见 [CREATE ROLE](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/create-role/)。 - 当前 Schema 示例使用[示例数据集](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/overview/example-dataset/)中的`movie`图;先选择加载该数据集的 Schema。 - 使用`/my_schema`路径的示例前,请在该 Schema 中准备对应对象,或替换为已有对象路径。 ### 授予 Schema 访问权 将`USAGE`直接授予用户: ```` GRANT USAGE ON SCHEMA /my_schema TO USER user1 ```` 也可以将`USAGE`授予角色: ```` GRANT USAGE ON SCHEMA /my_schema TO ROLE role1 ```` `USAGE`不会授予 Schema 中对象的权限。例如,要允许`user1`查询`/my_schema`中的图,需要同时授予以下权限: ```` ''' GRANT USAGE ON SCHEMA /my_schema TO USER user1 ''' ''' GRANT MATCH ON GRAPH /my_schema/movie TO USER user1 ''' ```` 更多信息,请参见 [Schema 访问控制](https://dev-docs.yueshu.com.cn/v5.3.2/server-admin/authorization/schema-access-control/)。 ### 授予当前图的查询权限 ```` GRANT MATCH ON GRAPH movie TO ROLE role1 ```` ### 授予指定图的查询权限 ```` GRANT MATCH ON GRAPH /my_schema/movie TO ROLE role1 ```` 访问该图时,角色还需要拥有`/my_schema`的`USAGE`。 ### 授予点类型的写入和查询权限 ```` GRANT INSERT, MATCH ON NODE TYPE movie.Actor TO ROLE role1 ```` ### 授予点属性的查询权限 ```` GRANT MATCH ON NODE PROPERTY movie.Actor.name TO ROLE role1 ````