支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

REVOKE

REVOKE — 移除存取權限

概要

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
    ON [ TABLE ] table_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE sequence_name [, ...]
         | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE database_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN domain_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER fdw_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER server_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_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 SCHEMA schema_name [, ...] }
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE lang_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT loid [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] }
    ON PARAMETER configuration_parameter [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE tablespace_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE type_name [, ...]
    FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

REVOKE [ { ADMIN | INHERIT | SET } OPTION FOR ]
    role_name [, ...] FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

where role_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 OPTIONSET OPTION。這相當於將對應選項的值設定為 FALSE

注意事項

使用者只能撤銷由該使用者直接授予的權限。例如,如果使用者 A 將帶有授予選項的權限授予使用者 B,而使用者 B 又將其授予使用者 C,則使用者 A 無法直接從 C 撤銷該權限。相反,使用者 A 可以從使用者 B 撤銷授予選項,並使用 CASCADE 選項,以便依次從使用者 C 撤銷該權限。另一個例子是,如果 A 和 B 都將相同的權限授予 C,A 可以撤銷他們自己的授予,但不能撤銷 B 的授予,因此 C 仍然會有效地擁有該權限。

當物件的非擁有者嘗試在該物件上 REVOKE 權限時,如果使用者對該物件沒有任何權限,則該命令將會完全失敗。只要存在一些權限,該命令就會繼續執行,但它只會撤銷使用者擁有授予選項的那些權限。REVOKE ALL PRIVILEGES 形式在沒有授予選項時會發出警告訊息,而其他形式如果在命令中明確命名的任何權限的授予選項不存在時,也會發出警告。

如果超級使用者選擇發出 GRANTREVOKE 命令,則該命令的執行方式就像是由受影響物件的擁有者發出的一樣。(由於角色沒有擁有者,因此在 GRANT 角色成員資格的情況下,該命令的執行方式就像是由啟動超級使用者發出的一樣。)由於所有權限最終都來自物件擁有者(可能間接地透過授予選項鏈),因此超級使用者可以撤銷所有權限,但這可能需要使用如上所述的 CASCADE

即使角色並非受影響物件的擁有者,仍然可以執行 REVOKE,只要該角色是物件擁有者的成員,或者該角色是持有物件 WITH GRANT OPTION 權限的角色成員。 在這種情況下,命令的執行方式如同是由實際擁有物件或持有 WITH GRANT OPTION 權限的包含角色所發出。 例如,如果表 t1 的擁有者是角色 g1,而角色 u1g1 的成員,那麼 u1 就可以撤銷 t1 上由 g1 授權的權限。 這將包括由 u1 以及 g1 的其他成員授予的權限。

如果執行 REVOKE 的角色透過多個角色成員路徑間接持有權限,則不指定將使用哪個包含角色來執行該命令。 在這種情況下,最佳實踐是使用 SET ROLE 成為您想要執行 REVOKE 的特定角色。 否則可能會導致撤銷您不打算撤銷的權限,或者根本不撤銷任何權限。

有關特定權限類型以及如何檢查物件權限的更多資訊,請參閱 第 5.8 節

範例

撤銷 public 對表 films 的 insert 權限

REVOKE INSERT ON films FROM PUBLIC;

撤銷使用者 manuel 對視窗 kinds 的所有權限

REVOKE ALL PRIVILEGES ON kinds FROM manuel;

請注意,這實際上意味著 撤銷我授予的所有權限

撤銷使用者 joe 在角色 admins 中的成員資格

REVOKE admins FROM joe;

相容性

GRANT 命令的相容性注意事項同樣適用於 REVOKE。 根據標準,需要關鍵字 RESTRICTCASCADE,但 PostgreSQL 預設採用 RESTRICT

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用 此表單 來報告文件問題。