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进行更改。 当前用户标识符与权限检查相关。
仅当初始会话用户(已认证用户)具有超级用户特权时,才可以更改会话用户标识符。 否则,仅当命令指定了经过身份验证的用户名时,该命令才会被接受。
DEFAULT和RESET表单将会话和当前用户标识符重置为原始身份验证的用户名。 这些表格可以由任何用户执行。
参数
- 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出现,但是这些选项在实践中并不重要。 Greenplum数据库允许使用标识符语法(rolename),而SQL则不允许。 SQL在事务期间不允许使用此命令。 Greenplum数据库没有进行此限制。 SESSION和LOCAL修饰符是Greenplum数据库的扩展名,RESET语法也是如此。