pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
ALTER DEFAULT PRIVILEGES — define default access 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更改全局默认权限来改变这种行为。
使用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;
移除通常会在函数上授予的公共 EXECUTE 权限, 使后续由角色admin创建的所有函数不再自动具有该权限:
ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
在 SQL 标准中没有ALTER DEFAULT PRIVILEGES语句。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。