On this page
更改默认特权
更改默认权限-定义默认访问权限
Synopsis
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 ]
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
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 ]
Description
ALTER DEFAULT PRIVILEGES
允许您设置将应用于将来创建的对象的特权。 (这不会影响分配给已经存在的对象的特权.)当前,只能更改模式,表(包括视图和外部表),序列,函数和类型(包括域)的特权。
您只能更改将由您自己或您所属的角色创建的对象的默认特权。可以全局设置特权(即,针对当前数据库中创建的所有对象),也可以仅针对指定架构中创建的对象设置特权。
如GRANT所述,任何对象类型的默认特权通常都会向对象所有者授予所有可授予的权限,并且还可以向PUBLIC
授予某些特权。但是,可以通过使用ALTER DEFAULT PRIVILEGES
更改全局默认特权来更改此行为。
根据架构指定的默认特权将添加到特定对象类型的全局默认特权中。这意味着,如果每个特权在全局范围内被授予(默认情况下或根据先前未指定模式的ALTER DEFAULT PRIVILEGES
命令),则无法撤消每个特权。每模式REVOKE
仅可用于反转先前的每模式GRANT
的效果。
Parameters
target_role
- 当前角色是成员的现有角色的名称。如果省略
FOR ROLE
,则假定为当前角色。
- 当前角色是成员的现有角色的名称。如果省略
schema_name
- 现有模式的名称。如果指定,将更改以后在该架构中创建的对象的默认特权。如果省略
IN SCHEMA
,则会更改全局默认权限。设置架构权限时不允许IN SCHEMA
,因为架构不能嵌套。
- 现有模式的名称。如果指定,将更改以后在该架构中创建的对象的默认特权。如果省略
role_name
Notes
使用psql的\ddp
命令获取有关默认权限的现有分配的信息。特权值的含义与GRANT下针对\dp
解释的含义相同。
如果要删除已更改了默认特权的角色,则必须撤消其默认特权的更改,或使用DROP OWNED BY
摆脱该角色的默认特权条目。
Examples
向您随后在模式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;
但是请注意,您无法使用仅限于单个模式的命令来实现这种效果。该命令无效,除非它撤消匹配的GRANT
:
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
这是因为每个模式的默认特权只能将特权添加到全局设置,而不能删除其授予的特权。
Compatibility
SQL 标准中没有ALTER DEFAULT PRIVILEGES
语句。