↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / SQL 命令 / 角色与权限

SQL COMMAND · 角色与权限

SET SESSION AUTHORIZATION

设置当前会话的会话用户标识符和当前用户标识符

set the session user identifier and the current user identifier of the current session

SET角色与权限引入 7.2现存至 20 devel2 次语法变更

动词
SET
对象
SESSION AUTHORIZATION
引入版本
7.2
状态
现存
语法变更次数
2
手册小节数
5

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 无变化。

语法铁道图 PostgreSQL 18

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

SET SESSION LOCAL SESSION AUTHORIZATION user_name
SET SESSION AUTHORIZATION · 语法 2
SET SESSION LOCAL SESSION AUTHORIZATION DEFAULT
SET SESSION AUTHORIZATION · 语法 3
RESET SESSION AUTHORIZATION

语法概要

SET [ SESSION | LOCAL ] SESSION AUTHORIZATION user_name
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT
RESET SESSION AUTHORIZATION

PostgreSQL 18 手册 · 查看完整参考页

描述

这个命令将当前 SQL 会话的会话用户标识符和当前用户标识符设置为 user_name。用户名可以写成一个标识符或者一个字符串字面量。例如,可以使用这个命令临时变为一个非特权用户,之后再切换回超级用户。

会话用户标识符初始时被设置为客户端提供的(可能已认证的)用户名。当前用户标识符通常与会话用户标识符相同,但可能在 SECURITY DEFINER 函数和类似机制的上下文中临时更改;它也可以通过 SET ROLE 更改。当前用户标识符用于权限检查。

只有当初始会话用户(即已认证用户)具有超级用户权限时,才能更改会话用户标识符。否则,只有当该命令指定的是已认证用户名时,才会被接受。

SESSION 和 LOCAL 修饰符的作用与常规的 SET 命令相同。

DEFAULT 和 RESET 形式会将会话用户标识符和当前用户标识符重置为最初已认证的用户名。这些形式可以由任何用户执行。

注解

SET SESSION AUTHORIZATION 不能在一个 SECURITY DEFINER 函数中使用。

示例

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 标准允许在字面值 user_name 的位置上使用某些其他表达式,但这些选项在实践中并不重要。PostgreSQL 允许使用标识符语法("username"),而 SQL 标准不允许。SQL 不允许在事务中使用这个命令;PostgreSQL 并不做此限制,因为没有理由这样做。SESSION 和 LOCAL 修饰符以及 RESET 语法都是 PostgreSQL 扩展。

标准把执行这个命令所需的权限留给实现定义。

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 17← 16正文更新

    正文更新
  2. PostgreSQL 9.0← 8.4语法变化

    + SET [ SESSION | LOCAL ] SESSION AUTHORIZATION user_name− SET [ SESSION | LOCAL ] SESSION AUTHORIZATION username正文更新
  3. PostgreSQL 8.3← 8.2正文更新

    正文更新
  4. PostgreSQL 8.1← 8.0正文更新

    正文更新
  5. PostgreSQL 7.4← 7.3正文更新

    正文更新
  6. PostgreSQL 7.3← 7.2语法变化

    + SET [ SESSION | LOCAL ] SESSION AUTHORIZATION username+ SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT+ RESET SESSION AUTHORIZATION− SET SESSION AUTHORIZATION 'username'正文更新
  7. PostgreSQL 7.2← 7.1新增此命令

同组命令

命令动词对象版本变动最近变更
ROLES & PRIVILEGES角色与权限20 条↑
GRANTGRANT— 1717 次
定义访问权限现存
REVOKEREVOKE— 1719 次
撤销访问权限现存
ALTER DEFAULT PRIVILEGESALTERDEFAULT PRIVILEGES 186 次
定义默认访问权限现存
CREATE GROUPCREATEGROUP 198 次
定义一个新的数据库角色现存
ALTER GROUPALTERGROUP 144 次
更改角色名称或成员资格现存
DROP GROUPDROPGROUP 8.22 次
移除一个数据库角色现存
SECURITY LABELSECURITYLABEL 126 次
定义或更改应用于对象的安全标签现存
DROP OWNEDDROPOWNED 142 次
移除一个数据库角色所拥有的数据库对象现存
REASSIGN OWNEDREASSIGNOWNED 142 次
更改一个数据库角色所拥有的数据库对象的所有权现存
CREATE POLICYCREATEPOLICY 142 次
为一个表定义一条新的行级安全策略现存
ALTER POLICYALTERPOLICY 141 次
更改一条行级安全策略的定义现存
DROP POLICYDROPPOLICY 9.61 次
从一个表中移除一条行级安全策略现存
CREATE ROLECREATEROLE 177 次
定义一个新的数据库角色现存
ALTER ROLEALTERROLE 1410 次
更改数据库角色现存
DROP ROLEDROPROLE 8.21 次
移除一个数据库角色现存
SET ROLESETROLE 9.01 次
设置当前会话的当前用户标识符现存
SET SESSION AUTHORIZATIONSETSESSION AUTHORIZATION 9.02 次
设置当前会话的会话用户标识符和当前用户标识符现存
CREATE USERCREATEUSER 1912 次
定义一个新的数据库角色现存
ALTER USERALTERUSER 1417 次
更改数据库角色现存
DROP USERDROPUSER 8.23 次
移除一个数据库角色现存