关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
设置当前会话的会话角色标识符和当前角色标识符。
SET [SESSION | LOCAL] SESSION AUTHORIZATION <rolename>
SET [SESSION | LOCAL] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION
此命令将当前SQL会话上下文的会话角色标识符和当前角色标识符设置为角色名。角色名可采用标识符或字符串字面量形式书写。使用此命令可实现例如临时切换为无特权用户,随后再切换回超级用户等操作。
会话角色标识符初始设置为客户端提供的(可能经过身份验证的)角色名称。当前角色标识符通常等同于会话用户标识符,但在setuid函数及类似机制的上下文中可能临时变更;也可通过SET ROLE进行修改。当前用户标识符与权限检查相关。
仅当初始会话用户(即经过身份验证的用户)具备超级用户权限时,才可更改会话用户标识符。否则,该命令仅在指定经过身份验证的用户名时才会被接受。
DEFAULT 和 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标准允许使用其他表达式替代字面角色名,但这些选项在实际应用中并不重要。数据库支持标识符语法(角色名),而SQL不支持。SQL在事务期间禁止此命令;数据库则无此限制。SESSION和LOCAL修饰符属于数据库扩展功能,RESET语法亦然。
## 另见
[SET ROLE](/doc/sql_ref/set_role)