## 设定角色 SET ROLE — 设置当前会话的当前用户标识符 ## 概要 ``` SET [ SESSION | LOCAL ] ROLE role_name SET [ SESSION | LOCAL ] ROLE NONE RESET ROLE ``` ## 描述 此命令将当前 SQL 会话的当前用户标识符设置为*`角色名称`*.角色名称可以写为标识符或字符串文字。后`设定角色`,执行 SQL 命令的权限检查,就好像命名角色是最初登录的角色一样。 指定的*`角色名称`*必须是当前会话用户所属的角色。(如果会话用户是超级用户,则可以选择任何角色。) 这`会议`和`当地的`修饰符的作用与常规相同[`放`](sql-set.html)命令。 `设置角色无`将当前用户标识符设置为当前会话用户标识符,由返回`会话用户`.`重置角色`将当前用户标识符设置为由[命令行选项](libpq-connect.html#LIBPQ-CONNECT-OPTIONS),[`改变角色`](sql-alterrole.html), 要么[`更改数据库`](sql-alterdatabase.html),如果存在任何此类设置。否则,`重置角色`将当前用户标识符设置为当前会话用户标识符。这些表格可以由任何用户执行。 ## 笔记 使用此命令,可以添加权限或限制一个人的权限。如果会话用户角色具有`继承`属性,然后它自动拥有每个角色的所有权限,它可以`设定角色`到;在这种情况下`设定角色`有效地删除直接分配给会话用户及其所属的其他角色的所有权限,只保留指定角色可用的权限。另一方面,如果会话用户角色具有`非继承`属性,`设定角色`删除直接分配给会话用户的权限,而是获取指定角色可用的权限。 特别是,当超级用户选择`设定角色`对于非超级用户角色,他们将失去超级用户权限。 `设定角色`效果堪比[`设置会话授权`](sql-set-session-authorization.html),但所涉及的权限检查是完全不同的。还,`设置会话授权`确定以后允许哪些角色`设定角色`命令,而改变角色`设定角色`不会将允许的角色集更改为以后`设定角色`. `设定角色`不处理角色指定的会话变量[`改变角色`](sql-alterrole.html)设置;这仅在登录期间发生。 `设定角色`不能在一个内使用`安全定义器`功能。 ## 例子 ``` 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) ```