2024 年 9 月 26 日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本: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 ]

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 ]

描述

ALTER DEFAULT PRIVILEGES 允许您设置将在将来创建的对象上应用的权限。(它不会影响分配给已存在对象的权限。)权限可以在全局范围内设置(即,对于当前数据库中创建的所有对象),或者仅针对在指定模式中创建的对象设置。

虽然您可以更改自己的默认权限以及您所属角色的默认权限,但在对象创建时,新对象权限仅受当前角色的默认权限影响,不会从当前角色所属的任何角色继承。

第 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 角色向其中插入数据

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;

删除通常授予函数的公共 EXECUTE 权限,该权限适用于 admin 角色随后创建的所有函数

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语句。

另请参见

GRANTREVOKE

提交更正

如果您在文档中发现任何错误,与您对特定功能的体验不符,或者需要进一步说明,请使用此表格报告文档问题。