Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

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 中随后创建的所有表(和视图)授予每个人选择权限,并允许角色 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;

角色 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