# 更改默认权限
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 | 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 }
[, ...] | 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 ]
# 描述
更改默认权限
允许您设置将应用于将来创建的对象的权限。(它不影响分配给已存在对象的权限。)目前,只能更改模式、表(包括视图和外部表)、序列、函数和类型(包括域)的权限。对于此命令,函数包括聚合和过程。话职能
和例行公事
在这个命令中是等价的。(例行公事
作为功能和程序一起使用的标准术语,在未来是首选。在早期的 PostgreSQL 版本中,只有单词职能
曾经被允许。无法分别为函数和过程设置默认权限。)
您只能更改将由您自己或您所属的角色创建的对象的默认权限。可以全局设置权限(即,针对在当前数据库中创建的所有对象),或仅针对在指定模式中创建的对象。
如中所述第 5.7 节,任何对象类型的默认权限通常授予对象所有者所有可授予的权限,并且可能授予某些权限上市
也是。但是,可以通过更改全局默认权限来更改此行为更改默认权限
.
为每个模式指定的默认权限将添加到特定对象类型的全局默认权限中。这意味着如果权限是全局授予的(默认情况下,或者根据之前的更改默认权限
未指定模式的命令)。按模式撤销
仅对扭转先前每个模式的影响有用授予
.
# 参数
目标角色
当前角色是其成员的现有角色的名称。如果为角色
被省略,则假定当前角色。
模式名称
现有架构的名称。如果指定,则为稍后在该模式中创建的对象更改默认权限。如果在架构中
省略时,全局默认权限将被更改。在架构中
为模式设置权限时不允许,因为模式不能嵌套。
角色名称
要授予或撤销权限的现有角色的名称。这个参数,以及所有其他参数*缩写的_grant_or_revoke
*, 如下所述进行操作授予或者撤销,除了一个是为整个类的对象而不是特定的命名对象设置权限。
# 笔记
采用psql的\ddp
命令以获取有关现有默认权限分配的信息。特权显示的含义与解释的相同\dp
在第 5.7 节.
如果您希望删除已更改默认权限的角色,则需要反转其默认权限的更改或使用掉落拥有者
摆脱角色的默认权限条目。
# 例子
为您随后在模式中创建的所有表(和视图)授予所有人 SELECT 权限架构
, 并允许角色网络用户
也插入它们:
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 权限行政
:
ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
但是请注意,您不能使用仅限于单个模式的命令来实现该效果。此命令无效,除非它正在撤消匹配授予
:
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
这是因为每个模式的默认权限只能将权限添加到全局设置中,而不能删除它授予的权限。
# 兼容性
没有更改默认权限
SQL 标准中的语句。