选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / SQL 命令 / 角色与权限

SQL COMMAND · 角色与权限

ALTER DEFAULT PRIVILEGES

定义默认访问权限

ALTER角色与权限引入 10(基线)现存至 20 devel3 次语法变更

动词
ALTER
对象
DEFAULT PRIVILEGES
引入版本
10(基线)
状态
现存
语法变更次数
3
手册小节数
5

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 无变化。

语法铁道图 PostgreSQL 18

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

ALTER DEFAULT PRIVILEGES FOR ROLE USER target_role , IN SCHEMA schema_name , abbreviated_grant_or_revoke
abbreviated_grant_or_revoke
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 GRANT SELECT UPDATE , ALL PRIVILEGES ON LARGE OBJECTS 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 REVOKE GRANT OPTION FOR SELECT UPDATE , ALL PRIVILEGES ON LARGE OBJECTS FROM GROUP role_name PUBLIC , CASCADE RESTRICT

语法概要

ALTER DEFAULT PRIVILEGES
    [ FOR { ROLE | USER } target_role [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    abbreviated_grant_or_revoke
其中 abbreviated_grant_or_revoke 是下列之一:

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 ]

GRANT { { SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECTS
    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 ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECTS
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

PostgreSQL 18 手册 · 查看完整参考页

描述

ALTER DEFAULT PRIVILEGES允许你设置将应用于未来创建对象的权限。 (它不会影响已经存在的对象上已分配的权限。) 权限既可以全局设置(即,对当前数据库中未来创建的所有对象生效), 也可以只针对指定模式中未来创建的对象设置。

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

Section 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命令, 可以获取现有默认权限分配的信息。权限显示的含义与 Section 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语句。

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 20← 19正文更新

    正文更新
  2. PostgreSQL 19← 18正文更新

    正文更新
  3. PostgreSQL 14← 13语法变化

    + 其中 abbreviated_grant_or_revoke 是下列之一:+ GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }+ GRANT { { SELECT | UPDATE }+ [, ...] | ALL [ PRIVILEGES ] }+ ON LARGE OBJECTS+ TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]+ + { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }+ + REVOKE [ GRANT OPTION FOR ]+ { { SELECT | UPDATE }+ [, ...] | ALL [ PRIVILEGES ] }+ ON LARGE OBJECTS+ FROM { [ GROUP ] role_name | PUBLIC } [, ...]+ [ CASCADE | RESTRICT ]− 其中abbreviated_grant_or_revoke为以下之一:− GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }− { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }正文更新
  4. PostgreSQL 12← 11语法变化

    + GRANT { { USAGE | CREATE }+ [, ...] | ALL [ PRIVILEGES ] }+ { { USAGE | CREATE }+ [, ...] | ALL [ PRIVILEGES ] }− GRANT { USAGE | CREATE | ALL [ PRIVILEGES ] }− { USAGE | CREATE | ALL [ PRIVILEGES ] }正文更新
  5. PostgreSQL 11← 10语法变化

    + ON { FUNCTIONS | ROUTINES }+ ON { FUNCTIONS | ROUTINES }− ON FUNCTIONS− ON FUNCTIONS正文更新

同组命令

命令动词对象版本变动最近变更
ROLES & PRIVILEGES角色与权限20 条
GRANTGRANT 204 次
定义访问权限现存
REVOKEREVOKE 204 次
撤销访问权限现存
ALTER DEFAULT PRIVILEGESALTERDEFAULT PRIVILEGES 143 次
定义默认访问权限现存
CREATE GROUPCREATEGROUP 192 次
定义一个新的数据库角色现存
ALTER GROUPALTERGROUP 141 次
更改角色名称或成员资格现存
DROP GROUPDROPGROUP
移除一个数据库角色现存
SECURITY LABELSECURITYLABEL 122 次
定义或更改应用于对象的安全标签现存
DROP OWNEDDROPOWNED 141 次
移除一个数据库角色所拥有的数据库对象现存
REASSIGN OWNEDREASSIGNOWNED 141 次
更改一个数据库角色所拥有的数据库对象的所有权现存
CREATE POLICYCREATEPOLICY 141 次
为一个表定义一条新的行级安全性策略现存
ALTER POLICYALTERPOLICY 141 次
更改一条行级安全性策略的定义现存
DROP POLICYDROPPOLICY
从一个表中移除一条行级安全性策略现存
CREATE ROLECREATEROLE 142 次
定义一个新的数据库角色现存
ALTER ROLEALTERROLE 142 次
更改数据库角色现存
DROP ROLEDROPROLE
移除一个数据库角色现存
SET ROLESETROLE
设置当前会话的当前用户标识符现存
SET SESSION AUTHORIZATIONSETSESSION AUTHORIZATION
设置当前会话的会话用户标识符和当前用户标识符现存
CREATE USERCREATEUSER 192 次
定义一个新的数据库角色现存
ALTER USERALTERUSER 142 次
更改数据库角色现存
DROP USERDROPUSER
移除一个数据库角色现存