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

ALTER DEFAULT PRIVILEGES

ALTER DEFAULT PRIVILEGES — 定義預設訪問許可權

概要

ALTER DEFAULT PRIVILEGES
    [ FOR { ROLE | USER } target_role [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    abbreviated_grant_or_revoke

where abbreviated_grant_or_revoke is one of:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
    [, ...] | ALL [ PRIVILEGES ] }
    ON TABLES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SEQUENCES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTIONS | ROUTINES }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON TYPES
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { USAGE | CREATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMAS
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECTS
    TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
    [, ...] | ALL [ PRIVILEGES ] }
    ON TABLES
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SEQUENCES
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTIONS | ROUTINES }
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPES
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | CREATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMAS
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECTS
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

描述

ALTER DEFAULT PRIVILEGES 允許您設定未來建立的物件的許可權。(它不會影響已存在物件的許可權。)許可權可以全域性設定(即,針對當前資料庫中建立的所有物件),或者僅針對指定模式(schema)中建立的物件。

雖然您可以更改您自己的預設許可權以及您所屬角色的預設許可權,但在物件建立時,新物件的許可權僅受當前角色預設許可權的影響,並且不從當前角色所屬的任何角色繼承。

第 5.8 節中所述,任何物件的預設許可權通常會授予物件所有者所有可授予的許可權,並且可能也會授予PUBLIC一些許可權。然而,可以透過使用ALTER DEFAULT PRIVILEGES更改全域性預設許可權來改變這種行為。

目前,只能更改模式、表(包括檢視和外部表)、序列、函式、型別(包括域)和大物件的許可權。在此命令中,函式包括聚合函式和過程。在此命令中,FUNCTIONSROUTINES是等效的。(ROUTINES是未來函式和過程的總稱的首選術語。在早期 PostgreSQL 版本中,只允許使用FUNCTIONS。無法單獨設定函式和過程的預設許可權。)

每個模式指定的預設許可權會新增到特定物件型別的全域性預設許可權之上。這意味著如果許可權是全域性授予的(無論是預設授予,還是根據先前未指定模式的ALTER DEFAULT PRIVILEGES命令授予的),您就不能按模式撤銷這些許可權。按模式REVOKE僅在撤銷先前按模式GRANT的效果時才有用。

引數

target_role

更改target_role建立的物件的預設許可權,如果未指定,則更改當前角色的預設許可權。

schema_name

現有模式的名稱。如果指定,則將更改該模式中之後建立的物件的預設許可權。如果省略IN SCHEMA,則將更改全域性預設許可權。IN SCHEMA不允許用於設定模式和大物件的許可權,因為模式不能巢狀,大物件也不屬於任何模式。

role_name

要授予或撤銷許可權的現有角色的名稱。此引數以及abbreviated_grant_or_revoke中的所有其他引數,其作用與GRANTREVOKE下的描述相同,不同之處在於您正在為整個物件類別設定許可權,而不是為特定的命名物件。

註釋

使用psql\ddp命令獲取有關現有預設許可權設定的資訊。許可權顯示的含義與第 5.8 節\dp的解釋相同。

如果您想刪除一個其預設許可權已被更改的角色,則有必要撤銷其預設許可權的更改,或者使用DROP OWNED BY來刪除該角色的預設許可權條目。

示例

為在模式myschema中隨後建立的所有表(和檢視)授予所有人SELECT許可權,並允許webuser角色向其中INSERT

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;

撤銷上述操作,以便隨後建立的表不再具有比正常更多的許可權

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE SELECT ON TABLES FROM PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE INSERT ON TABLES FROM webuser;

移除admin角色隨後建立的所有函式通常授予的公共EXECUTE許可權

ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

但是請注意,您不能僅憑一個針對單個模式的命令來實現此效果。此命令無效,除非它正在撤銷匹配的GRANT

ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

這是因為每個模式的預設許可權只能新增到全域性設定之上,而不能移除全域性設定授予的許可權。

相容性

SQL 標準中沒有ALTER DEFAULT PRIVILEGES語句。

另請參閱

GRANT, REVOKE

提交更正

如果您在文件中發現任何不正確、不符合您對特定功能的體驗或需要進一步說明的內容,請使用此表單報告文件問題。