
# SET ROLE
#### 功能描述
设置当前会话的当前用户标识符，即在当前数据库会话中切换或启用指定角色。
#### 注意事项
- 当前会话的用户必须是指定的role_name角色的成员，系统管理员可以切换至任意角色。
- 可以使用SET ROLE添加权限或限制某个用户的权限。如果会话用户的角色具有INHERITS属性，则它将自动拥有SET ROLE所设置角色的所有权限；在这种情况下，SET ROLE实际上是删除了所有直接赋予会话用户的权限，以及它的所属角色的权限，仅保留指定角色的权限。另一方面，如果会话用户的角色具有NOINHERITS属性，则SET ROLE将删除直接赋予会话用户的权限，而获取指定角色的权限。
 
#### 语法格式
- 在当前数据库会话中切换或启用指定角色。
  ```
  SET [ SESSION | LOCAL ] ROLE role_name PASSWORD '{password}';
  ```
  
- 重置当前会话角色。
  ```
  RESET ROLE;
  ```
  
 
#### 参数说明
表1SET ROLE参数说明 
| 参数         | 描述                   | 取值范围     |
|:---|:---|:---|
| SESSION    | 声明这个命令只对当前会话生效（缺省值）。 | -        |
| LOCALE     | 声明该命令仅对当前事务生效。       | -        |
| role_name  | 角色名称。                | 已有的角色名称。 |
| password   | 角色的密码。               | -        |
| RESET ROLE | 用于重置当前用户标识。          | -        |
   
#### 示例
查看当前会话用户。
```
SELECT CURRENT_USER;
```
```
current_user
--------------
 dbadmin
(1 row)
```
创建名称为role_new的角色，并切换当前会话用户为role_new。
```
CREATE ROLE role_new IDENTIFIED BY '{Password}';
SET ROLE role_new PASSWORD '{password}';
```
查看当前会话用户，显示为role_new。
```
SELECT CURRENT_USER;
```
```
current_user
--------------
 role_new
(1 row)
```
将当前用户重置为原会话用户。
```
RESET role;
```
