2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 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

SET SESSION AUTHORIZATION

SET SESSION AUTHORIZATION — 設定會話使用者識別符號和當前會話的當前使用者識別符號

概要

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

描述

此命令將當前 SQL 會話的會話使用者識別符號和當前使用者識別符號設定為 user_name。使用者名稱稱可以寫成識別符號或字串字面量。使用此命令,例如,可以暫時切換到一個特權較低的使用者,然後再切換回超級使用者。

會話使用者識別符號最初設定為客戶端提供的(可能是已驗證的)使用者名稱。當前使用者識別符號通常等於會話使用者識別符號,但在 SECURITY DEFINER 函式和類似機制的上下文中可能會暫時更改;它也可以透過 SET ROLE 更改。當前使用者識別符號與許可權檢查相關。

只有當初始會話使用者(已驗證使用者)具有超級使用者許可權時,才能更改會話使用者識別符號。否則,只有在指定已驗證的使用者名稱時,命令才會被接受。

與常規 SET 命令一樣,SESSIONLOCAL 修飾符的作用相同。

DEFAULTRESET 形式將會話和當前使用者識別符號重置為最初已驗證的使用者名稱。任何使用者都可以執行這些形式。

註釋

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 不做此限制,因為沒有理由這樣做。SESSIONLOCAL 修飾符是 PostgreSQL 的擴充套件,RESET 語法也是。

執行此命令所需的確切許可權由標準定義為實現定義的。

另請參閱

SET ROLE

提交更正

如果您在文件中看到任何不正確、不符合您對特定功能的體驗或需要進一步澄清的內容,請使用 此表單 報告文件問題。