REVOKE — 移除訪問許可權
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ]table_name
[, ...] | ALL TABLES IN SCHEMAschema_name
[, ...] } FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | REFERENCES } (column_name
[, ...] ) [, ...] | ALL [ PRIVILEGES ] (column_name
[, ...] ) } ON [ TABLE ]table_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCEsequence_name
[, ...] | ALL SEQUENCES IN SCHEMAschema_name
[, ...] } FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASEdatabase_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON DOMAINdomain_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPERfdw_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN SERVERserver_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { { FUNCTION | PROCEDURE | ROUTINE }function_name
[ ( [ [argmode
] [arg_name
]arg_type
[, ...] ] ) ] [, ...] | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMAschema_name
[, ...] } FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGElang_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECTloid
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] } ON PARAMETERconfiguration_parameter
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMAschema_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACEtablespace_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPEtype_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] REVOKE [ { ADMIN | INHERIT | SET } OPTION FOR ]role_name
[, ...] FROMrole_specification
[, ...] [ GRANTED BYrole_specification
] [ CASCADE | RESTRICT ] whererole_specification
can be: [ GROUP ]role_name
| PUBLIC | CURRENT_ROLE | CURRENT_USER | SESSION_USER
REVOKE
命令用於撤銷先前授予給一個或多個角色的許可權。關鍵字 PUBLIC
指代所有角色組成的隱式定義的組。
有關許可權型別的含義,請參見 GRANT
命令的說明。
請注意,任何特定角色所擁有的許可權是直接授予該角色的許可權、授予其當前所屬的任何角色的許可權以及授予給 PUBLIC
的許可權的總和。因此,例如,從 PUBLIC
撤銷 SELECT
許可權並不意味著所有角色都失去了對該物件的 SELECT
許可權:那些直接獲得或透過其他角色獲得的許可權仍然有效。同樣,從一個使用者撤銷 SELECT
許可權可能不會阻止該使用者使用 SELECT
,如果 PUBLIC
或其他成員角色仍然擁有 SELECT
許可權的話。
如果指定了 GRANT OPTION FOR
,則僅撤銷該許可權的授予選項,而不撤銷許可權本身。否則,將同時撤銷許可權和授予選項。
如果一個使用者擁有帶授予選項的許可權,並已將其授予其他使用者,則其他使用者擁有的許可權稱為依賴許可權。如果正在撤銷第一個使用者擁有的許可權或授予選項,並且存在依賴許可權,則如果指定了 CASCADE
,這些依賴許可權也會被撤銷;如果未指定,撤銷操作將失敗。此遞迴撤銷僅影響透過可追溯到此 REVOKE
命令主體使用者的使用者鏈授予的許可權。因此,受影響的使用者可能有效地保留該許可權,如果該許可權是透過其他使用者授予的。
撤銷表上的許可權時,該表上每個列的相應列許可權(如果有)也會自動被撤銷。另一方面,如果一個角色已被授予表上的許可權,則從單個列撤銷相同的許可權將無效。
撤銷角色成員資格時,GRANT OPTION
被稱為 ADMIN OPTION
,但行為相似。請注意,在 PostgreSQL 16 之前的版本中,角色成員授予的依賴許可權未被跟蹤,因此 CASCADE
對角色成員資格無效。現在情況已不再如此。另請注意,此形式的命令不允許在 role_specification
中使用噪聲詞 GROUP
。
正如可以從現有角色授予中移除 ADMIN OPTION
一樣,也可以撤銷 INHERIT OPTION
或 SET OPTION
。這相當於將相應選項的值設定為 FALSE
。
使用者只能撤銷由自己直接授予的許可權。例如,如果使用者 A 已將帶授予選項的許可權授予使用者 B,而使用者 B 又將其授予使用者 C,則使用者 A 不能直接從 C 撤銷該許可權。相反,使用者 A 可以撤銷使用者 B 的授予選項並使用 CASCADE
選項,以便相應地從使用者 C 撤銷該許可權。再舉一個例子,如果 A 和 B 都將相同的許可權授予了 C,則 A 可以撤銷自己的授予,但不能撤銷 B 的授予,因此 C 仍然有效地擁有該許可權。
當一個非物件所有者嘗試 REVOKE
物件上的許可權時,如果使用者對該物件沒有任何許可權,命令將直接失敗。只要存在某種許可權,命令就會繼續執行,但它只會撤銷使用者擁有授予選項的那些許可權。REVOKE ALL PRIVILEGES
形式在未持有任何授予選項時會發出警告訊息,而其他形式在未持有命令中明確命名的任何許可權的授予選項時會發出警告。(原則上,這些陳述也適用於物件所有者,但由於所有者始終被視為擁有所有授予選項,因此這些情況永遠不會發生。)
如果超級使用者選擇發出 GRANT
或 REVOKE
命令,則該命令將執行,就好像是由受影響物件的所有者發出的。(由於角色沒有所有者,在授予角色成員資格的情況下,命令將執行,就好像是由引導超級使用者發出的。)由於所有許可權最終來自物件所有者(可能透過授予選項鍊間接獲得),因此超級使用者可以撤銷所有許可權,但這可能需要使用 CASCADE
,如上所述。
REVOKE
也可以由一個不是受影響物件所有者的角色執行,但該角色是擁有該物件的角色的成員,或者是一個擁有該物件 WITH GRANT OPTION
許可權的角色的成員。在這種情況下,命令將執行,就好像是由實際擁有物件或擁有 WITH GRANT OPTION
許可權的包含角色發出的。例如,如果表 t1
由角色 g1
擁有,而角色 u1
是 g1
的成員,那麼 u1
可以撤銷在 t1
上被記錄為由 g1
授予的許可權。這包括 u1
以及 g1
的其他成員所做的授予。
如果執行 REVOKE
的角色透過多個角色成員身份路徑間接持有許可權,則不確定將使用哪個包含角色來執行命令。在這種情況下,最佳實踐是使用 SET ROLE
來成為你想要執行 REVOKE
的特定角色。未能這樣做可能導致撤銷了非預期的許可權,或者根本沒有撤銷任何許可權。
有關特定許可權型別以及如何檢查物件許可權的更多資訊,請參見 第 5.8 節。
撤銷 public 對錶 films
的插入許可權
REVOKE INSERT ON films FROM PUBLIC;
撤銷使用者 manuel
在檢視 kinds
上的所有許可權
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
請注意,這實際上意味著“撤銷我授予的所有許可權”。
撤銷使用者 joe
在 admins
角色中的成員資格
REVOKE admins FROM joe;
GRANT
命令的相容性說明同樣適用於 REVOKE
。根據標準,需要關鍵字 RESTRICT
或 CASCADE
,但 PostgreSQL 預設假定為 RESTRICT
。
如果您在文件中發現任何不正確之處、與您實際使用的功能不符的地方,或者需要進一步說明的地方,請使用 此表格 來報告文件問題。