SET ROLE
SET ROLE - 设置当前会话的当前用户标识符
语法格式
SET [ SESSION | LOCAL ] ROLE role_name
SET [ SESSION | LOCAL ] ROLE NONE
RESET ROLE
说明
此命令将当前SQL会话的当前用户标识设置为 role_name。角色名称可以写为标识符或字符串文字。在 SET ROLE之后,执行SQL命令的权限检查,就好像命名角色是最初登录的角色一样。
指定的 role_name 必须是当前会话用户所属的角色。(如果会话用户是超级用户,则可以选择任何角色。)
SESSION 和 LOCAL 修饰符的作用与常规 SET命令的作用相同。
NONE 和 RESET表单将当前用户标识符重置为当前会话用户标识符。这些表单可以由任何用户执行。
注意事项
使用此命令,可以添加权限或限制一个权限。如果会话用户角色具有 INHERITS属性,则它自动拥有它可以 SET ROLE 到的每个角色的所有权限;在这种情况下,SET ROLE有效地删除了直接分配给会话用户以及它所属的其他角色的所有权限,只留下指定角色可用的权限。另一方面,如果会话用户角色具有NOINHERITS 属性, SET ROLE将删除直接分配给会话用户的权限,而是获取指定角色可用的权限。
特别是,当超级用户选择 SET ROLE为非超级用户角色时,他们将失去超级用户权限。
SET ROLE 具有与 SET SESSION AUTHORIZATION相当的效果,但所涉及的权限检查完全不同。此外, SET SESSION AUTHORIZATION确定哪些角色允许用于以后的 SET ROLE 命令,而使用 SET ROLE更改角色不会更改允许用于以后 SET ROLE 的角色集。
SET ROLE 不处理角色的 ALTER ROLE设置指定的会话变量;这只发生在登录期间。
SET ROLE 不能在 SECURITY DEFINER 函数中使用。
示例
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | peter
SET ROLE 'paul';
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | paul
兼容性
Vastbase E100允许使用标识符语法( “rolename”),而SQL标准要求将角色名称写为字符串文字。 SQL在事务期间不允许此命令; Vastbase E100没有这个限制,因为没有理由。 SESSION 和 LOCAL修饰符是Vastbase E100扩展名, RESET 语法也是如此。