支援的版本:目前 (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 變更。目前使用者識別碼與權限檢查相關。

只有當初始工作階段使用者(經過身份驗證的使用者)具有超級使用者權限時,才能變更工作階段使用者識別碼。否則,只有當指令指定經過身份驗證的使用者名稱時,才會接受該指令。

SESSIONLOCAL 修飾詞的作用與常規 SET 指令相同。

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

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步說明的內容,請使用此表單報告文件問題。