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
命令一樣,SESSION
和 LOCAL
修飾符的作用相同。
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
語法也是。
執行此命令所需的確切許可權由標準定義為實現定義的。
如果您在文件中看到任何不正確、不符合您對特定功能的體驗或需要進一步澄清的內容,請使用 此表單 報告文件問題。