W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
SET ROLE — 設(shè)置當(dāng)前會話的當(dāng)前用戶標(biāo)識符
SET [ SESSION | LOCAL ] ROLE role_name
SET [ SESSION | LOCAL ] ROLE NONE
RESET ROLE
這個命令把當(dāng)前 SQL 會話的當(dāng)前用戶標(biāo)識符設(shè)置為 role_name
。 角色名可以寫成一個標(biāo)識符或者一個字符串。在 SET ROLE
之后,對 SQL 命令的權(quán)限檢查時就 好像該角色就是原先登錄的角色一樣。
當(dāng)前會話用戶必須是指定的 角色role_name
的一個成員(如果會話用戶是一個超級用戶,則可以選擇任何角色)。
SESSION
和LOCAL
修飾符發(fā)揮的作用和 常規(guī)的SET命令一樣。
NONE
和RESET
形式把當(dāng)前用戶標(biāo)識符 重置為當(dāng)前會話用戶標(biāo)識符。這些形式可以由任何用戶執(zhí)行。
使用這個命令可以增加特權(quán)或者限制特權(quán)。如果會話用戶角色具有 INHERIT
屬性,則它會自動具有它能 SET ROLE
到的所有角色的全部特權(quán)。在這種情況下 SET ROLE
實際會刪除所有直接分配給會話用戶的特 權(quán)以及分配給會話用戶作為其成員的其他角色的特權(quán),只留下所提及 角色可用的特權(quán)。換句話說,如果會話用戶沒有 NOINHERIT
屬性,
SET ROLE
會刪除 直接分配給會話用戶的特權(quán)而得到所提及角色可用的特權(quán)。
特別地,當(dāng)一個超級用戶選擇SET ROLE
到一個非 超級用戶角色時,它們會丟失其超級用戶特權(quán)。
SET ROLE
的效果堪比 SET SESSION AUTHORIZATION,但是涉及的特權(quán)檢查 完全不同。還有,SET SESSION AUTHORIZATION
決定
后來的SET ROLE
命令可以使用哪些角色, 不過用 SET ROLE
更改角色并不會改變后續(xù) SET ROLE
能夠使用的角色集。
SET ROLE
不會處理角色的ALTER ROLE
設(shè)置指定的會話變量。這只在登錄期間發(fā)生。
SET ROLE
不能在一個 SECURITY DEFINER
函數(shù)中使用。
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | peter
SET ROLE 'paul';
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | paul
PostgreSQL允許標(biāo)識符 語法("
),而 SQL 標(biāo)準(zhǔn)要求 角色名被寫成字符串。SQL 不允許在事務(wù)中使用這個命令,而 PostgreSQL并不做此限 制,因為并沒有原因需要這樣做。和rolename
"RESET
語法 一樣,SESSION
和 LOCAL
修飾符是一種 PostgreSQL擴展。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: