ALTER DEFAULT PRIVILEGES
From PostgreSQL wiki
Jump to navigationJump to search名字
ALTER DEFAULT PRIVILEGES -- 定义缺省访问权限
语法概要
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 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 改变全局缺省权限来改变。
参数
- target_role
- 已有角色的名称,当前角色需要是这个角色的成员。如果没有指定 FOR ROLE,那么就假定是当前角色。
- schema_name
- 现有模式的名称。每个 'target_role' 必须在每个指定的模式上具有 CREATE权限。如果没有指定 IN SCHEMA,那么被修改的会是全局缺省权限。
- role_name
- 被授予或者撤消权限的现有角色的名称。该参数和'abbreviated_grant_or_revoke'参数集下的所有参数,与 GRANT 和 REVOKE 命令中的作用相似,所不同的是这里设置的是某一类所有对象的权限,而不是设置某个特定命名对象的权限。
注意
使用 psql 的 \ddp 命令可以获取缺省权限的已分配信息。权限取值的含义与 GRANT 下的 \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;
对随后角色admin创建的所有函数,撤销其在PUBLIC上的EXECUTE权限(一般情况下是授予的):
ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
兼容性
SQL标准里没有 ALTER DEFAULT PRIVILEGES 语句。