SET SESSION AUTHORIZATION

Name

SET SESSION AUTHORIZATION -- 为当前会话设置会话用户标识符和当前用户标识符

Synopsis

SET [ SESSION | LOCAL ] SESSION AUTHORIZATION username
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION

描述

这条命令把当前 SQL 会话环境里的会话用户标识和当前用户标识设置为 username。 这个用户名可以写成一个标识符或者一个字串文本。 使用这个命令,我们可以临时变成一个非特权用户,稍后再切换回超级用户。

会话用户标识符一开始设置为(可能经过认证的)客户端提供的用户名。 当前用户标识符通常等于会话用户标识符, 但是可能在 "setuid" 的环境里或者类似的机制里临时改变。 也可以用 SET ROLE 来修改。当前用户的身份和权限检查有关。

只有在初始会话用户(认证了的用户)有超级用户权限的时候,会话用户标识符才能改变。 否则,只有在指定了被认证的用户名的情况下,系统才接受该命令。

SESSIONLOCAL 修饰词和普通 SET 命令里的作用相同。

DEFAULTRESET 形式重置会话和当前用户标识符为初始认证的用户名。这些形式可以为任何用户执行。

例子

SELECT SESSION_USER, CURRENT_USER;

 session_user | current_user
--------------+--------------
 peter        | peter

SET SESSION AUTHORIZATION 'paul';

SELECT SESSION_USER, CURRENT_USER;

 session_user | current_user
--------------+--------------
 paul         | paul

兼容性

SQL 标准允许一些其它的表达式出现在文本 username 的位置上,不过这个东西实际上并不重要。 PostgreSQL 允许标识符语法 ("username"),而 SQL 不允许。 SQL 不允许在一个事务的过程中用这条命令; PostgreSQL 没有这个限制,因为没有什么理由不允许这样用。 SESSIONLOCALPostgreSQL 扩展,RESET 语法也是。

标准把执行这条命令所需要的权限留给具体实现来定义。

又见

SET ROLE