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
进行更改。 当前用户标识符与权限检查相关。仅当初始会话用户(已认证用户)具有超级用户权限时,才可以更改会话用户标识符。 否则,仅当命令指定了经过身份验证的用户名时,该命令才会被接受。
DEFAULT
和RESET
表单将会话和当前用户标识符重置为原始身份验证的用户名。 这些表格可以由任何用户执行。 - 参数
-
该SQL命令参数说明见下
SESSION
- 指定该命令对当前会话生效。这是默认值。
LOCAL
- 指定该命令仅对当前事务生效。 在
COMMIT
或ROLLBACK
之后,会话级设置将再次生效。 请注意,如果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数据库没有进行此限制。SESSION
和LOCAL
修饰符是SeaboxMPP数据库的扩展名,RESET
语法也是如此。 - 相关SQL命令
SET ROLE