?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
SET [ SESSION | LOCAL ] SESSION AUTHORIZATION user_name SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT RESET SESSION AUTHORIZATION
這條命令把當(dāng)前會(huì)話環(huán)境里的會(huì)話用戶標(biāo)識(shí)和當(dāng)前用戶標(biāo)識(shí)都設(shè)置為 user_name。這個(gè) 用戶名可以寫成一個(gè)標(biāo)識(shí)符或者一個(gè)字符串文本。使用這個(gè)命令,可 以臨時(shí)變成一個(gè)非特權(quán)用戶,稍后再切換回超級(jí)用戶。
會(huì)話用戶標(biāo)識(shí)符一開始設(shè)置為(可能經(jīng)過認(rèn)證的)客戶端提供的用戶名。 當(dāng)前用戶標(biāo)識(shí)符通常等于會(huì)話用戶標(biāo)識(shí)符,但是可能在SECURITY DEFINER 的環(huán)境里或者類似的機(jī)制里臨時(shí)改變。也可以用SET ROLE 來修改。當(dāng)前用戶的身份和權(quán)限檢查有關(guān)。
只有在初始會(huì)話用戶(已認(rèn)證用戶)有超級(jí)用戶權(quán)限的時(shí)候,會(huì)話用戶標(biāo) 識(shí)符才能改變。否則,只有在指定了被認(rèn)證的用戶名的情況下,系統(tǒng)才 接受該命令。
SESSION和LOCAL修飾詞和普通SET 命令里的作用相同。
DEFAULT和RESET形式重置會(huì)話和當(dāng)前用戶標(biāo)識(shí)符為初 始認(rèn)證的用戶名。這些形式可以為任何用戶執(zhí)行。
SET SESSION AUTHORIZATION不能被用在SECURITY DEFINER 函數(shù)內(nèi)。
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標(biāo)準(zhǔn)允許一些其它的表達(dá)式出現(xiàn)在文本user_name 的位置上,不過這個(gè)東西實(shí)際上并不重要。PostgreSQL 允許標(biāo)識(shí)符語法("username"),而SQL不允許。SQL不 允許在一個(gè)事務(wù)的過程中用這條命令;PostgreSQL 沒有這個(gè)限制,因?yàn)闆]有什么理由不允許這樣用。SESSION和LOCAL PostgreSQL的擴(kuò)展,RESET語法也是。
標(biāo)準(zhǔn)把執(zhí)行這條命令所需要的權(quán)限留給具體實(shí)現(xiàn)來定義。