?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
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撤銷以前賦予一個(gè)或多個(gè)角色的權(quán)限。 關(guān)鍵字PUBLIC代表隱含定義的、擁有所有角色的組。
參閱GRANT命令 權(quán)限類型的含義的描述。
請(qǐng)注意,任何特定的角色都將擁有直接賦予它的權(quán)限, 加上它所在組的權(quán)限,再加上賦予PUBLIC的權(quán)限的總和。因此, 舉例來說,廢止PUBLIC的SELECT權(quán)限并不意味著所有角色都失去了 對(duì)該對(duì)象的SELECT權(quán)限:那些直接得到的權(quán)限以及通過一個(gè)組得到的權(quán)限仍然有效。 類似地,從一個(gè)用戶撤回SELECT可能不會(huì)阻止該用戶使用SELECT, 如果PUBLIC或者其他成員角色仍然有SELECT權(quán)限。
如果指定了GRANT OPTION FOR,那么只是撤銷對(duì)該權(quán)限的授權(quán)的權(quán)力, 而不是撤銷該權(quán)限本身。否則,權(quán)限和授權(quán)選項(xiàng)都被撤銷。
如果一個(gè)用戶持有某個(gè)權(quán)限,并且還有授權(quán)的選項(xiàng),并且還把這個(gè)權(quán)限賦予了其它用戶, 那么那些其它用戶持有的權(quán)限都叫做依賴性權(quán)限。如果第一個(gè)用戶持有的權(quán)限或者授權(quán)選項(xiàng)被撤銷, 而依賴性權(quán)限仍然存在;那么如果聲明了CASCADE,如果沒有聲明,則所有依賴性權(quán)限都被撤銷,否則撤銷動(dòng)作就會(huì)失敗。 這個(gè)遞規(guī)的撤銷只影響那種通過一個(gè)用戶鏈賦予的權(quán)限,這個(gè)鏈條可以通過這條REVOKE命令里面給出的用戶跟蹤。 因此,如果權(quán)限本身是通過其它用戶賦予的,那么被影響的用戶可以有效地保留這個(gè)權(quán)限。
當(dāng)撤銷表上的權(quán)限時(shí),相應(yīng)的列特權(quán)(若有)也會(huì)自動(dòng)撤銷表中的每一列。
在撤銷一個(gè)角色里的成員關(guān)系的時(shí)候, 不是調(diào)用ADMIN OPTION而是調(diào)用GRANT OPTION, 但是行為類似。不過這種形式的命令不允許出現(xiàn)GROUP關(guān)鍵字。
使用psql的\dp命令顯示在一個(gè)現(xiàn)存表和列 上賦予的權(quán)限。又見GRANT獲取關(guān)于格式的信息。 對(duì)于非表對(duì)象,有可以顯示其特權(quán)的其他\d命令。
一個(gè)用戶只能撤銷由它自己直接賦予的權(quán)限。舉例來說, 如果用戶A帶著授權(quán)選項(xiàng)把一個(gè)權(quán)限賦予了用戶B ,然后用戶B又賦予了用戶C , 那么用戶A不能直接將C的權(quán)限撤銷。但是,用戶A可以撤銷用戶B的授權(quán)選項(xiàng), 并且使用CASCADE選項(xiàng),這樣,用戶C的權(quán)限就會(huì)自動(dòng)被撤銷。另外一個(gè)例子: 如果A和B都賦予了C同樣的權(quán)限,則A可以撤銷他自己的授權(quán)選項(xiàng),但是不能撤銷B的, 因此C仍然有效地?fù)碛性摍?quán)限。
如果一個(gè)對(duì)象的非所有者試圖REVOKE對(duì)象上的權(quán)限,那么,如果這個(gè)用戶沒有該對(duì)象上的權(quán)限,則命令馬上失敗。 只要他有某些權(quán)限,則命令繼續(xù),但是它只撤銷那些該用戶有授權(quán)選項(xiàng)的權(quán)限。 如果沒有在授權(quán)選項(xiàng),那么REVOKE ALL PRIVILEGES形式將發(fā)出一個(gè)錯(cuò)誤信息, 而對(duì)于其它形式的命令而言,如果同樣是命令中指定名字的權(quán)限沒有相應(yīng)的授權(quán)選項(xiàng), 那么該命令將發(fā)出一個(gè)警告。原則上這些語句也適用于對(duì)象所有者,但是因?yàn)樗姓呖偸钦J(rèn)為持有所有授權(quán)選項(xiàng), 所以這種情況絕不會(huì)發(fā)生。
如果一個(gè)超級(jí)用戶發(fā)出一個(gè)GRANT或REVOKE命令,那么命令是以被影響的對(duì)象的所有者執(zhí)行的。 因?yàn)樗袡?quán)限最終從對(duì)象所有者(可能間接通過賦權(quán)選項(xiàng))獲取,超級(jí)用戶可以廢除所有權(quán)限, 但是這樣就要求像上面說的那樣使用CASCADE。
REVOKE也可以由一個(gè)并非被影響對(duì)象的所有者來執(zhí)行,不過這個(gè)角色必須是擁有該對(duì)象的角色的成員, 或者是一個(gè)在該對(duì)象上持有WITH GRANT OPTION的角色的成員。在這種情況下, 該命令執(zhí)行起來就好像是由實(shí)際擁有該對(duì)象的角色,或者是在該對(duì)象上持有WITH GRANT OPTION權(quán)限的角色發(fā)出的一樣。 比如,如果表t1被g1所有,而u1是u1的成員, 那么u1可以撤銷t1上的權(quán)限, 而紀(jì)錄為g1發(fā)出的命令。這種現(xiàn)像包括u1和其它g1角色成員發(fā)出的授權(quán)。
如果執(zhí)行REVOKE的角色持有權(quán)限是通過多層成員關(guān)系獲得的, 那么具體是哪個(gè)包含的角色執(zhí)行的該命令就是未聲明的。在這種場(chǎng)合下, 最好的方法是使用SET ROLE成為你希望執(zhí)行REVOKE的角色。 不這么做的后果可能導(dǎo)致刪除你不想刪除的權(quán)限,或者是啥權(quán)限都沒有刪除。
撤銷公眾在表films上的插入權(quán)限:
REVOKE INSERT ON films FROM PUBLIC;
撤銷用戶manuel對(duì)視圖kinds的所有權(quán)限:
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
請(qǐng)注意這樣實(shí)際上意味著"撤銷所有我賦予的權(quán)限"。
刪除用戶joe的admins成員關(guān)系:
REVOKE admins FROM joe;
GRANT命令的兼容性信息基本上也適用于REVOKE。 標(biāo)準(zhǔn)要求RESTRICT或CASCADE關(guān)鍵字必須出現(xiàn), 但是PostgreSQL假設(shè)缺省是RESTRICT。
GRANT