
# SET ROLE
#### 功能描述
设置当前会话的当前用户标识符。
#### 注意事项
- 当前会话的用户必须是指定的rolename角色的成员，当系统管理员可以选择任何角色。
- 使用这条命令，它可能会增加一个用户的权限，也可能会限制一个用户的权限。如果会话用户的角色有INHERITS属性，则它自动拥有它能SET ROLE变成的角色的所有权限；在这种情况下，SET ROLE实际上是删除了所有直接赋予会话用户的权限，以及它的所属角色的权限，只剩下指定角色的权限。另一方面，如果会话用户的角色有NOINHERITS属性，SET ROLE删除直接赋予会话用户的权限，而获取指定角色的权限。
 
#### 语法格式
- 设置当前会话的当前用户标识符。
  ```
  SET [ SESSION | LOCAL ] ROLE role_name PASSWORD 'password';
  ```
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/figure/zh-cn_image_0000002527060294.png "点击放大")
  
- 重置当前用户标识为当前会话用户标识符。
  ```
  RESET ROLE;
  ```
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/figure/zh-cn_image_0000002558060193.png)
  
 
#### 参数说明
- **SESSION**
  声明这个命令只对当前会话起作用，此参数为缺省值。
  
- **LOCAL**
  声明该命令只在当前事务中有效。
  
- **role_name**
  角色名。
  取值范围：字符串，数据库中已存在的用户名。
  
- **password**
  角色的密码。要求符合密码的命名规则。
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 使用密文密码限制如下：
    - 管理员用户不能使用密文密码切换到其他管理员用户，只能向权限更低用户切换。
     
  
  - 使用密文密码通常用于gs_dump、gs_dumpall导出场景，其他场景不建议直接使用密文密码。
    
- **RESET ROLE**
  用于重置当前用户标识。
  
 
#### 示例
```
--查询当前会话用户，当前用户。
gaussdb=# SELECT SESSION_USER, CURRENT_USER;
 session_user | current_user 
--------------+--------------
 omm          | omm
(1 row)
--创建角色paul。
gaussdb=# CREATE ROLE paul PASSWORD '********';
--设置当前用户为paul。
gaussdb=# SET ROLE paul PASSWORD '********';
--查看当前会话用户，当前用户。
gaussdb=> SELECT SESSION_USER, CURRENT_USER;
 session_user | current_user 
--------------+--------------
 omm          | paul
(1 row)
--重置当前用户。
gaussdb=> RESET ROLE;
--删除用户。
gaussdb=# DROP USER paul;
```
#### 相关参考
[SET SESSION AUTHORIZATION](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0686.html#ZH-CN_TOPIC_0000002558948195)
