SET SESSION AUTHORIZATION

SET SESSION AUTHORIZATION

设置会话角色标识符和当前会话的当前角色标识符。

概要

SET [SESSION | LOCAL] SESSION AUTHORIZATION rolename

SET [SESSION | LOCAL] SESSION AUTHORIZATION DEFAULT

RESET SESSION AUTHORIZATION

描述

此命令将会话角色标识符和当前SQL会话上下文的当前角色标识符设置为rolename。 角色名称可以写为标识符或字符串文字。 使用此命令,例如,可以暂时成为非特权用户,然后再切换回为超级用户。

会话角色标识符最初设置为客户端提供的(可能经过身份验证的)角色名称。 当前角色标识符通常等于会话用户标识符,但是在setuid函数和类似机制的上下文中可能会暂时更改; 也可以通过SET ROLE进行更改。 当前用户标识符与权限检查相关。

仅当初始会话用户(已认证用户)具有超级用户特权时,才可以更改会话用户标识符。 否则,仅当命令指定了经过身份验证的用户名时,该命令才会被接受。

DEFAULTRESET表单将会话和当前用户标识符重置为原始身份验证的用户名。 这些表格可以由任何用户执行。

参数

SESSION
指定该命令对当前会话生效。这是默认值。
LOCAL
指定该命令仅对当前事务生效。 在COMMITROLLBACK之后,会话级设置将再次生效。 请注意,如果SET LOCAL在事务外部执行,则似乎无效。
rolename
指定的角色的名称。
NONE
RESET
将会话和当前角色标识符重置为用于登录的角色的标识符。

示例

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标准允许其他一些表达式代替文字rolename出现,但是这些选项在实践中并不重要。 Greenplum数据库允许使用标识符语法(rolename),而SQL则不允许。 SQL在事务期间不允许使用此命令。 Greenplum数据库没有进行此限制。 SESSIONLOCAL修饰符是Greenplum数据库的扩展名,RESET语法也是如此。

另见

SET ROLE