# 设定角色

SET ROLE — 设置当前会话的当前用户标识符

# 概要

SET [ SESSION | LOCAL ] ROLE role_name
SET [ SESSION | LOCAL ] ROLE NONE
RESET ROLE

# 描述

此命令将当前 SQL 会话的当前用户标识符设置为*角色名称*.角色名称可以写为标识符或字符串文字。后设定角色,执行 SQL 命令的权限检查,就好像命名角色是最初登录的角色一样。

指定的*角色名称*必须是当前会话用户所属的角色。(如果会话用户是超级用户,则可以选择任何角色。)

会议当地的修饰符的作用与常规相同命令。

设置角色无将当前用户标识符设置为当前会话用户标识符,由返回会话用户.重置角色将当前用户标识符设置为由命令行选项,改变角色, 要么更改数据库,如果存在任何此类设置。否则,重置角色将当前用户标识符设置为当前会话用户标识符。这些表格可以由任何用户执行。

# 笔记

使用此命令,可以添加权限或限制一个人的权限。如果会话用户角色具有继承属性,然后它自动拥有每个角色的所有权限,它可以设定角色到;在这种情况下设定角色有效地删除直接分配给会话用户及其所属的其他角色的所有权限,只保留指定角色可用的权限。另一方面,如果会话用户角色具有非继承属性,设定角色删除直接分配给会话用户的权限,而是获取指定角色可用的权限。

特别是,当超级用户选择设定角色对于非超级用户角色,他们将失去超级用户权限。

设定角色效果堪比设置会话授权,但所涉及的权限检查是完全不同的。还,设置会话授权确定以后允许哪些角色设定角色命令,而改变角色设定角色不会将允许的角色集更改为以后设定角色.

设定角色不处理角色指定的会话变量改变角色设置;这仅在登录期间发生。

设定角色不能在一个内使用安全定义器功能。

# 例子

SELECT SESSION_USER, CURRENT_USER;

 session_user | current_user
## Compatibility

PostgreSQL allows identifier syntax (`"*`rolename`*"`), while the SQL standard requires the role name to be written as a string literal. SQL does not allow this command during a transaction; PostgreSQL does not make this restriction because there is no reason to. The `SESSION` and `LOCAL` modifiers are a PostgreSQL extension, as is the `RESET` syntax.

## See Also

[SET SESSION AUTHORIZATION](sql-set-session-authorization.html)