ALTER DEFAULT PRIVILEGES — 定义默认访问权限
ALTER DEFAULT PRIVILEGES [ FOR { ROLE | USER }target_role
[, ...] ] [ IN SCHEMAschema_name
[, ...] ]abbreviated_grant_or_revoke
whereabbreviated_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
更改全局默认权限来改变此行为。
目前,只有模式、表(包括视图和外部表)、序列、函数和类型(包括域)的权限可以更改。对于此命令,函数包括聚合和过程。在此命令中,FUNCTIONS
和ROUTINES
是等效的。(ROUTINES
作为函数和过程的标准术语,在未来会被优先使用。在早期的 PostgreSQL 版本中,只允许使用FUNCTIONS
一词。无法分别设置函数和过程的默认权限。)
针对每个模式指定的默认权限将添加到特定对象类型的全局默认权限中。这意味着如果全局授予权限(默认情况下,或根据之前未指定模式的ALTER DEFAULT PRIVILEGES
命令),您无法按模式撤销权限。按模式的REVOKE
仅用于撤销之前按模式的GRANT
的影响。
使用psql的\ddp
命令获取有关现有默认权限分配的信息。权限显示的含义与第 5.8 节中对\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
语句。
如果您在文档中发现任何错误,与您对特定功能的体验不符,或者需要进一步说明,请使用此表格报告文档问题。