SET SESSION AUTHORIZATION

Name

SET SESSION AUTHORIZATION -- 為目前會話設置會話用戶標識符和目前用戶標識符

Synopsis

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

描述

這條命令把目前 SQL 會話環境裡的會話用戶標識和目前用戶標識設置為 username。 這個用戶名可以寫成一個標識符或者一個字串文本。 使用這個命令,我們可以臨時變成一個非特權用戶,稍後再切換回超級用戶。

會話用戶標識符一開始設置為(可能經過認證的)客戶端提供的用戶名。 目前用戶標識符通常等於會話用戶標識符, 但是可能在 "setuid" 的環境裡或者類似的機制裡臨時改變。 目前用戶標識符和權限檢查相關。

只有在初始會話用戶(認證了的用戶)有超級用戶權限的時候,會話用戶標識符才能改變。 否則,只有在指定了被認證的用戶名的情況下,系統才接受該命令。

SESSIONLOCAL 修飾詞和普通 SET 命令裡的作用相同。

DEFAULTRESET 形式重置會話和目前用戶標識符為初始認證的用戶名。這些形式可以為任何用戶執行。

例子

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 沒有這個限制,因為沒有什麼理由不允許這樣用。 標準中資料表示執行這條命令的權限要求是具體實現定義的。