ALTER DEFAULT PRIVILEGES
定义默认访问权限集,这些权限将应用于指定的用户在以后创建的对象。默认情况下,用户只能更改他们自己的默认访问权限。只有超级用户能够为其他用户指定默认权限。
您可以将默认权限应用到角色、用户或用户组。您可以为在当前数据库中创建的所有对象全局设置默认权限,也可以仅为在指定的架构中创建的对象进行此设置。
默认权限仅应用于新对象。运行 ALTER DEFAULT PRIVILEGES 时不会更改现有对象的权限。要授予对数据库或架构中任何用户创建的所有当前和将来对象的权限,请参阅限定范围权限。
要查看有关数据库用户的默认权限的信息,请查询 PG_DEFAULT_ACL 系统目录表。
有关权限的更多信息,请参阅 GRANT。
所需的权限
以下是 ALTER DEFAULT PRIVILEGES 所需的权限:
Superuser
具有 ALTER DEFAULT PRIVILEGES 权限的用户
更改自己的默认访问权限的用户
为其具有访问权限的 Schema 设置权限的用户
语法
ALTER DEFAULT PRIVILEGES [ FOR USER target_user [, ...] ] [ IN SCHEMA schema_name [, ...] ] grant_or_revoke_clause where grant_or_revoke_clause is one of: GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] } ON TABLES TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON PROCEDURES TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] } ON TABLES FROM user_name [, ...] [ RESTRICT ] REVOKE { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] } ON TABLES FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS FROM user_name [, ...] [ RESTRICT ] REVOKE { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON PROCEDURES FROM user_name [, ...] [ RESTRICT ] REVOKE { EXECUTE | ALL [ PRIVILEGES ] } ON PROCEDURES FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]
参数
- FOR USER target_user
-
可选。为其定义默认权限的用户的名称。只有超级用户能够为其他用户指定默认权限。默认值为当前用户。
- IN SCHEMA schema_name
-
可选。如果出现 IN SCHEMA 子句,则指定默认权限将应用于在指定 schema_name 中创建的新对象。在这种情况下,作为 ALTER DEFAULT PRIVILEGES 目标的用户或用户组必须对指定 schema 拥有 CREATE 权限。特定于某个 schema 的默认权限将添加到现有的全局默认权限中。默认情况下,默认权限全局应用于整个数据库。
- GRANT
-
针对指定用户创建的所有新表和视图、函数或存储过程,向指定的用户或组授予的权限集。与使用 GRANT 命令一样,您可以使用 GRANT 子句来设置相同的权限和选项。
- WITH GRANT OPTION
-
一个子句,指示接收权限的用户又可以将相同权限授予其他用户。您无法将 WITH GRANT OPTION 授予组或 PUBLIC。
- TO user_name | ROLE role_name | GROUP group_name
-
将指定的默认权限应用于的用户、角色或用户组的名称。
- REVOKE
-
针对指定用户创建的所有新表、函数或存储过程,从指定的用户或组撤销权限集。与使用 REVOKE 命令一样,您可以使用 REVOKE 子句来设置相同的权限和选项。
- GRANT OPTION FOR
-
一个子句,仅撤消将指定的权限授予其他用户的选项,而不撤消权限本身。您无法从组或 PUBLIC 撤消 GRANT OPTION。
- FROM user_name | ROLE role_name | GROUP group_name
-
默认情况下从其撤消指定权限的用户、角色或用户组的名称。
- RESTRICT
-
RESTRICT 选项仅会撤消用户直接授予的权限。这是默认模式。
示例
假设您希望允许用户组 report_readers
中的所有用户查看用户 report_admin
创建的所有表和视图。在这种情况下,以超级用户身份执行以下命令。
alter default privileges for user report_admin grant select on tables to group report_readers;
在以下示例中,第一个命令授予对您创建的所有新表和视图的 SELECT 权限。
alter default privileges grant select on tables to public;
以下示例针对您在 sales_admin
schema 中创建的所有新表和视图,将 INSERT 权限授予 sales
用户组。
alter default privileges in schema sales grant insert on tables to group sales_admin;
以下示例撤消上述示例中 ALTER DEFAULT PRIVILEGES 命令的执行效果。
alter default privileges in schema sales revoke insert on tables from group sales_admin;
默认情况下,PUBLIC 用户组对所有新的用户定义的函数具有执行权限。要撤消对您的新函数的 public
执行权限,然后只将执行权限授予 dev_test
用户组,请运行以下命令。
alter default privileges revoke execute on functions from public; alter default privileges grant execute on functions to group dev_test;