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
變更。目前使用者識別碼與權限檢查相關。
只有當初始工作階段使用者(經過身份驗證的使用者)具有超級使用者權限時,才能變更工作階段使用者識別碼。否則,只有當指令指定經過身份驗證的使用者名稱時,才會接受該指令。
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 允許識別字語法("
),而 SQL 不允許。SQL 不允許在交易期間執行此指令;PostgreSQL 沒有此限制,因為沒有理由這樣做。username
"SESSION
和 LOCAL
修飾詞是 PostgreSQL 的延伸,RESET
語法也是。
執行此指令所需的權限由標準實作定義。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步說明的內容,請使用此表單報告文件問題。