管理角色 
=========================

本节主要介绍 Oracle 模式中角色的管理命令。

在 Oracle 模式中，角色是一组系统权限、对象权限的组合，角色中也可以包含其他角色。

一个用户可以被授予多个角色，同时还可以设置这些角色是否生效。用户将拥有生效角色的所有权限，用户不拥有失效的角色中包含的权限。

OceanBase 数据库支持对 Oracle 模式中的角色进行以下操作：
**说明**



授予系统权限或角色时，当前用户必须拥有被授予的权限或角色，并且拥有 `GRANT OPTION` 权限，才能操作成功。

* 角色之间相互授权

  角色相互授权的语法如下：

  ```sql
  GRANT <role_name_list> TO role_name WITH ADMIN OPTION;
  ```

  

* 向 `PUBLIC` 角色中添加权限或将 `PUBLIC` 角色添加给用户

  支持整个租户内的 `PUBLIC` 角色，可以向 `PUBLIC` 角色中添加权限，也可以将 `PUBLIC` 角色添加给某一个用户。

  示例如下：

  ```sql
  obclient> GRANT [privilege_list] TO PUBLIC;
  
  obclient> GRANT PUBLIC TO user_name;
  ```

  

* 指定用户在登录时生效或失效的角色

  支持通过 `DEFAULT ROLE` 子句，指定一个或者多个角色名称，生效一个或多个角色；也可以通过 `ALL`，生效所有被授予的角色。同时，还可以通过 `EXCEPT`，指定失效的角色；通过 `NONE`，失效所有被授予的角色。

  示例如下：

  ```sql
  obclient> ALTER USER user_name DEFAULT ROLE role_name;
  ```

  

* 指定当前会话中，用户生效或失效的角色

  支持在当前会话中通过 `SET ROLE` 语句设置用户被授予的角色哪些生效或失效。
  **说明**

  

  设置后，仅影响当前 Session，不影响之后的 Session。
  



