Skip to content

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 }
    [, ...] | 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 }
    [, ...] | 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.7 节中所述,任何对象类型的默认权限通常会向对象所有者授予所有可授予的权限,并且也可能会向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.7 节中针对\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