设置当前会话的当前用户标识符。
语法
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;