2025年9月25日: PostgreSQL 18 釋出!
支援的版本:當前 (18) / 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 命令,則該命令將執行,就好像是由受影響物件的所有者發出的。(由於角色沒有所有者,在授予角色成員資格的情況下,命令將執行,就好像是由引導超級使用者發出的。)由於所有許可權最終來自物件所有者(可能透過授予選項鍊間接獲得),因此超級使用者可以撤銷所有許可權,但這可能需要使用 CASCADE,如上所述。

REVOKE 也可以由一個不是受影響物件所有者的角色執行,但該角色是擁有該物件的角色的成員,或者是一個擁有該物件 WITH GRANT OPTION 許可權的角色的成員。在這種情況下,命令將執行,就好像是由實際擁有物件或擁有 WITH GRANT OPTION 許可權的包含角色發出的。例如,如果表 t1 由角色 g1 擁有,而角色 u1g1 的成員,那麼 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;

請注意,這實際上意味著“撤銷我授予的所有許可權”。

撤銷使用者 joeadmins 角色中的成員資格

REVOKE admins FROM joe;

相容性

GRANT 命令的相容性說明同樣適用於 REVOKE。根據標準,需要關鍵字 RESTRICTCASCADE,但 PostgreSQL 預設假定為 RESTRICT

提交更正

如果您在文件中發現任何不正確之處、與您實際使用的功能不符的地方,或者需要進一步說明的地方,請使用 此表格 來報告文件問題。