支持的版本: 当前 (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 ]

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 也向其中 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;

删除通常在函数上授予的公共 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 语句。

另请参见

GRANT, REVOKE

提交更正

如果您发现文档中的任何内容不正确,与您使用特定功能的体验不符或需要进一步澄清,请使用此表格报告文档问题。