# 设定角色
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)