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

提交更正

如果您在文档中发现任何不正确、不符合您对特定功能的体验或需要进一步说明的内容,请使用此表单报告文档问题。