ALTER DEFAULT PRIVILEGES
ALTER DEFAULT PRIVILEGES¶
修改默认的访问权限。
- 语法
-
``` sql 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 ]
GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES 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 ]
REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPES FROM { [ GROUP ] role_name | PUBLIC } [, …] [ CASCADE | RESTRICT ] ```
- 描述
-
ALTER DEFAULT PRIVILEGES
允许你为将来会创建的对象赋予权限。(不会影响那些已经赋予存在对象的权限。)目前只有表(包括视图和外键表)、序列、函数、类型的权限可以被修改。只可以修改那些你自己或者你所在角色会创建的对象的权限。这些权限既可以在全局范围内设置(例如:在当前数据库创建的所有对象。),也可以为指定模式下的对象设置。每个模式指定的默认权限将添加到特定对象类型的全局默认权限。
如
GRANT
中介绍的,任何对象的默认权限通常都会被授予所有可授予的权限,也可能会被授予一些PUBLIC
权限。不管怎样,这些都可以通过ALTER DEFAULT PRIVILEGES
来修改全局默认权限来设置。 - 参数
-
该SQL命令参数说明见下
target_role
- 当前的角色是一个成员时,那么target_role为要修改的角色名,如果
FOR ROLE
被省略,那么会将当前的角色作为目标角色。 schema_name
- 模式名,如果指定了模式名,那么之后在这个模式下面创建的所有对象默认的权限都会被修改。如果
IN SCHEMA
被省略,那么全局权限会被修改。 role_name
- 授予或撤消权限的现有角色的名称。这个参数和所有在
abbreviated_grant_or_revoke
中的参数,按照GRANT
或REVOKE
描述中进行操作,除非这个是为整个对象类而不是特定的命名对象设置权限。
- 注意
-
用
ssql
的\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;
将后续由角色
admin
创建的所有函数移除通常在函数上赋予的公有EXECUTE
权限:ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
- 兼容性说明
- 在标准SQL语句中没有
ALTER DEFAULT PRIVILEGES
语句。 - 相关SQL命令
GRANT
,REVOKE