?
このドキュメントでは、 php中國語ネットマニュアル リリース
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | REFERENCES } ( column [, ...] ) [,...] | ALL [ PRIVILEGES ] ( column [, ...] ) } ON [ TABLE ] table_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON { SEQUENCE sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ ADMIN OPTION FOR ] role_name [, ...] FROM role_name [, ...] [ CASCADE | RESTRICT ]
REVOKE撤銷以前賦予一個或多個角色的權(quán)限。 關(guān)鍵字PUBLIC代表隱含定義的、擁有所有角色的組。
參閱GRANT命令 權(quán)限類型的含義的描述。
請注意,任何特定的角色都將擁有直接賦予它的權(quán)限, 加上它所在組的權(quán)限,再加上賦予PUBLIC的權(quán)限的總和。因此, 舉例來說,廢止PUBLIC的SELECT權(quán)限并不意味著所有角色都失去了 對該對象的SELECT權(quán)限:那些直接得到的權(quán)限以及通過一個組得到的權(quán)限仍然有效。 類似地,從一個用戶撤回SELECT可能不會阻止該用戶使用SELECT, 如果PUBLIC或者其他成員角色仍然有SELECT權(quán)限。
如果指定了GRANT OPTION FOR,那么只是撤銷對該權(quán)限的授權(quán)的權(quán)力, 而不是撤銷該權(quán)限本身。否則,權(quán)限和授權(quán)選項都被撤銷。
如果一個用戶持有某個權(quán)限,并且還有授權(quán)的選項,并且還把這個權(quán)限賦予了其它用戶, 那么那些其它用戶持有的權(quán)限都叫做依賴性權(quán)限。如果第一個用戶持有的權(quán)限或者授權(quán)選項被撤銷, 而依賴性權(quán)限仍然存在;那么如果聲明了CASCADE,如果沒有聲明,則所有依賴性權(quán)限都被撤銷,否則撤銷動作就會失敗。 這個遞規(guī)的撤銷只影響那種通過一個用戶鏈賦予的權(quán)限,這個鏈條可以通過這條REVOKE命令里面給出的用戶跟蹤。 因此,如果權(quán)限本身是通過其它用戶賦予的,那么被影響的用戶可以有效地保留這個權(quán)限。
當(dāng)撤銷表上的權(quán)限時,相應(yīng)的列特權(quán)(若有)也會自動撤銷表中的每一列。
在撤銷一個角色里的成員關(guān)系的時候, 不是調(diào)用ADMIN OPTION而是調(diào)用GRANT OPTION, 但是行為類似。不過這種形式的命令不允許出現(xiàn)GROUP關(guān)鍵字。
使用psql的\dp命令顯示在一個現(xiàn)存表和列 上賦予的權(quán)限。又見GRANT獲取關(guān)于格式的信息。 對于非表對象,有可以顯示其特權(quán)的其他\d命令。
一個用戶只能撤銷由它自己直接賦予的權(quán)限。舉例來說, 如果用戶A帶著授權(quán)選項把一個權(quán)限賦予了用戶B ,然后用戶B又賦予了用戶C , 那么用戶A不能直接將C的權(quán)限撤銷。但是,用戶A可以撤銷用戶B的授權(quán)選項, 并且使用CASCADE選項,這樣,用戶C的權(quán)限就會自動被撤銷。另外一個例子: 如果A和B都賦予了C同樣的權(quán)限,則A可以撤銷他自己的授權(quán)選項,但是不能撤銷B的, 因此C仍然有效地擁有該權(quán)限。
如果一個對象的非所有者試圖REVOKE對象上的權(quán)限,那么,如果這個用戶沒有該對象上的權(quán)限,則命令馬上失敗。 只要他有某些權(quán)限,則命令繼續(xù),但是它只撤銷那些該用戶有授權(quán)選項的權(quán)限。 如果沒有在授權(quán)選項,那么REVOKE ALL PRIVILEGES形式將發(fā)出一個錯誤信息, 而對于其它形式的命令而言,如果同樣是命令中指定名字的權(quán)限沒有相應(yīng)的授權(quán)選項, 那么該命令將發(fā)出一個警告。原則上這些語句也適用于對象所有者,但是因為所有者總是認為持有所有授權(quán)選項, 所以這種情況絕不會發(fā)生。
如果一個超級用戶發(fā)出一個GRANT或REVOKE命令,那么命令是以被影響的對象的所有者執(zhí)行的。 因為所有權(quán)限最終從對象所有者(可能間接通過賦權(quán)選項)獲取,超級用戶可以廢除所有權(quán)限, 但是這樣就要求像上面說的那樣使用CASCADE。
REVOKE也可以由一個并非被影響對象的所有者來執(zhí)行,不過這個角色必須是擁有該對象的角色的成員, 或者是一個在該對象上持有WITH GRANT OPTION的角色的成員。在這種情況下, 該命令執(zhí)行起來就好像是由實際擁有該對象的角色,或者是在該對象上持有WITH GRANT OPTION權(quán)限的角色發(fā)出的一樣。 比如,如果表t1被g1所有,而u1是u1的成員, 那么u1可以撤銷t1上的權(quán)限, 而紀錄為g1發(fā)出的命令。這種現(xiàn)像包括u1和其它g1角色成員發(fā)出的授權(quán)。
如果執(zhí)行REVOKE的角色持有權(quán)限是通過多層成員關(guān)系獲得的, 那么具體是哪個包含的角色執(zhí)行的該命令就是未聲明的。在這種場合下, 最好的方法是使用SET ROLE成為你希望執(zhí)行REVOKE的角色。 不這么做的后果可能導(dǎo)致刪除你不想刪除的權(quán)限,或者是啥權(quán)限都沒有刪除。
撤銷公眾在表films上的插入權(quán)限:
REVOKE INSERT ON films FROM PUBLIC;
撤銷用戶manuel對視圖kinds的所有權(quán)限:
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
請注意這樣實際上意味著"撤銷所有我賦予的權(quán)限"。
刪除用戶joe的admins成員關(guān)系:
REVOKE admins FROM joe;
GRANT命令的兼容性信息基本上也適用于REVOKE。 標(biāo)準要求RESTRICT或CASCADE關(guān)鍵字必須出現(xiàn), 但是PostgreSQL假設(shè)缺省是RESTRICT。
GRANT