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

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

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
历史版本PostgreSQL 7.4 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

SET SESSION AUTHORIZATION

SET SESSION AUTHORIZATION — 设置当前会话的会话用户标识符和当前用户标识符

大纲

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

描述

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

会话用户标识符最初被设置为客户端提供的(可能经过认证的) 用户名。当前用户标识符通常等于会话用户标识符,但在 SECURITY DEFINER函数及类似机制的上下文中可能发生 临时改变。当前用户标识符与权限检查相关。

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

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 标准允许在字面量username的位置 出现一些其他表达式,但它们在实践中并不重要。PostgreSQL 允许标识符语法("username"),而 SQL 不允许。 SQL 不允许在事务中执行这条命令;PostgreSQL 没有做这个限制,因为没有理由这样做。执行这条命令所需的权限 由标准留给实现定义。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。