更改默认特权

更改默认权限-定义默认访问权限

Synopsis

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 ]

Description

ALTER DEFAULT PRIVILEGES允许您设置将应用于将来创建的对象的特权。 (这不会影响分配给已经存在的对象的特权.)当前,只能更改模式,表(包括视图和外部表),序列,函数和类型(包括域)的特权。对于此命令,功能包括集合和过程。在此命令中,单词FUNCTIONSROUTINES是等效的。 (ROUTINES最好作为函数和过程结合在一起的标准术语.在较早的 PostgreSQL 发行版中,只允许使用FUNCTIONS一词.无法分别为函数和过程设置默认特权.)

您只能更改将由您自己或您所属的角色创建的对象的默认特权。可以全局设置特权(即,针对当前数据库中创建的所有对象),也可以仅针对指定架构中创建的对象设置特权。

GRANT所述,任何对象类型的默认特权通常都会向对象所有者授予所有可授予的权限,并且还可以向PUBLIC授予某些特权。但是,可以通过使用ALTER DEFAULT PRIVILEGES更改全局默认特权来更改此行为。

根据架构指定的默认特权将添加到特定对象类型的全局默认特权中。这意味着,如果每个特权在全局范围内被授予(默认情况下或根据先前未指定模式的ALTER DEFAULT PRIVILEGES命令),则无法撤消每个特权。每模式REVOKE仅可用于反转先前的每模式GRANT的效果。

Parameters

  • target_role

    • 当前角色是成员的现有角色的名称。如果省略FOR ROLE,则假定为当前角色。
  • schema_name

    • 现有模式的名称。如果指定,将更改以后在该架构中创建的对象的默认特权。如果省略IN SCHEMA,则会更改全局默认权限。设置架构权限时不允许IN SCHEMA,因为架构不能嵌套。
  • role_name

    • 要为其授予或撤销特权的现有角色的名称。此参数以及* abbreviated_grant_or_revoke *中的所有其他参数,按照GRANTREVOKE中的描述操作,除了一个参数是为整个对象类而不是特定命名对象设置权限。

Notes

使用psql\ddp命令获取有关默认权限的现有分配的信息。特权值的含义与GRANT下针对\dp解释的含义相同。

如果要删除已更改了默认特权的角色,则必须撤消其默认特权的更改,或使用DROP OWNED BY摆脱该角色的默认特权条目。

Examples

向您随后在架构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;

对于角色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;

这是因为每个模式的默认特权只能将特权添加到全局设置,而不能删除其授予的特权。

Compatibility

SQL 标准中没有ALTER DEFAULT PRIVILEGES语句。

See Also

GRANT, REVOKE