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
也向其中 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
语句。
如果您发现文档中的任何内容不正确,与您使用特定功能的体验不符或需要进一步澄清,请使用此表格报告文档问题。