©
This document usesPHP Chinese website manualRelease
ALTER DEFAULT PRIVILEGES [ FOR { ROLE | USER }target_role[, ...] ] [ IN SCHEMAschema_name[, ...] ]abbreviated_grant_or_revokewhereabbreviated_grant_or_revokeis 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 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 FROM { [ GROUP ]role_name| PUBLIC } [, ...] [ CASCADE | RESTRICT ]
ALTER DEFAULT PRIVILEGES允许您设置应用于将来创建的对象的 权限。(这不会影响分配到已有对象中的权限。)目前,只有表(包括视图)、 序列和函数的权限可以更改。
您可以为您将亲自创建或者您所在的角色创建的对象更改默认权限。权限可以全局设置 (例如:对于在当前数据库中创建的所有对象),或者仅仅针对特定模式中的对象设置。 每个模式的特定默认权限被添加到特定对象类型的全局默认权限中。
正如GRANT下解释的,任意对象类型的缺省权限通常会给 对象的所有者授予可授予的权限,并且可能也会向PUBLIC授予一些权限。 然而,可以通过用ALTER DEFAULT PRIVILEGES改变全局默认权限来改变 这些特性。
当前角色是其一员的已有角色的名称。如果FOR ROLE被省去, 当前角色就被假设的。
现有模式的名称。每个target_role必须对每个特定模式有CREATE权限。
授予或者取消权限的现有角色的名称。这个参数,以及abbreviated_grant_or_revoke下的所有 参数,与GRANT和REVOKE下描述 的相似。除了一个是吗,面向对象的所有类设置权限的而不是特定的命名对象。
使用psql的\ddp命令来获得关于默认 权限的现有分配情况的信息。权限值的意义与GRANT下的\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;
在SQL标准中没有ALTER DEFAULT PRIVILEGES语句。