设置当前会话的当前用户标识符。

语法

SET ROLE { rolename | NONE }

说明

此命令将当前 SQL 会话上下文的当前用户标识符设置为 rolename。在 SET ROLE 之后,执行 SQL 命令的权限检查,就好像指定的角色是最初登录的角色一样。

指定的 rolename 必须是当前会话用户所属的角色。

注释

可以使用此命令添加特权或者限制某个用户的特权。如果会话用户角色具有 INHERITS 属性,则它将自动拥有可执行 SET ROLE 以设置为的每个角色的所有特权;在这种情况下,SET ROLE 有效地删除了直接分配给会话用户及其所属其他角色的所有特权,只留下指定角色可用的特权。另一方面,如果会话用户角色具有 NOINHERITS 属性,则 SET ROLE 将删除直接分配给会话用户的特权,而获取对指定角色可用的特权。特别是,当超级用户选择执行 SET ROLE 以将角色设置为非超级用户角色时,该超级用户将失去其超级用户特权。

示例

用户 mary 具有 admins 角色的身份:

SET ROLE admins;

用户 mary 恢复了其自己的身份:

SET ROLE NONE;