SET SESSION AUTHORIZATION — 设置当前会话的会话用户标识符和当前用户标识符
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION user_name
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION
这个命令把当前 SQL 会话的会话用户标识符和当前用户标识符设置为
user_name
。
用户名可以被写成一个标识符或者一个字符串。例如,可以使用这个
命令临时成为一个无特权用户并且稍后切换回来成为一个超级用户。
会话用户标识符初始时被设置为客户端提供的(可能已认证的)用户名。
当前用户标识符通常等于会话用户标识符,但是可能在
SECURITY DEFINER
函数和类似机制的环境中临时更改。
也可以用SET ROLE
更改它。当前用户标识符与
权限检查相关。
会话用户标识符只能在初始会话用户 已认证用户具有超级用户特权时被更改。 否则,只有该命令指定已认证用户名时才会被接受。
SESSION
和LOCAL
修饰符发挥的作用和常规
SET
命令一样。
DEFAULT
和RESET
形式把会话用户标识符和
当前用户标识符重置为初始的已认证用户名。这些形式可以由任何用户执行。
SET SESSION AUTHORIZATION
不能在一个
SECURITY DEFINER
函数中使用。
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 标准允许一些其他表达式出现在文本
user_name
的位置上,但是实际上这些
选项并不重要。PostgreSQL允许标
识符语法("
),而 SQL 标准不允许。
SQL 不允许在事务中使用这个命令,而
PostgreSQL并不做此限
制,因为并没有原因需要这样做。和username
"RESET
语法
一样,SESSION
和
LOCAL
修饰符是一种
PostgreSQL扩展。
标准把执行这个命令所需的特权留给实现定义。