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