跳转至

SET SESSION AUTHORIZATION

SET SESSION AUTHORIZATION

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

语法

``` sql SET [SESSION | LOCAL] SESSION AUTHORIZATION rolename

SET [SESSION | LOCAL] SESSION AUTHORIZATION DEFAULT

RESET SESSION AUTHORIZATION ```

描述

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

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

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

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

参数

该SQL命令参数说明见下

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出现,但是这些选项在实践中并不重要。SeaboxMPP数据库允许使用标识符语法(rolename),而SQL则不允许。SQL在事务期间不允许使用此命令。 SeaboxMPP数据库没有进行此限制。SESSIONLOCAL修饰符是SeaboxMPP数据库的扩展名,RESET语法也是如此。
相关SQL命令
SET ROLE