内容提要
ALTER DEFAULT PRIVILEGES命令用于设置未来创建对象的默认权限。只能更改模式、表、序列、函数和类型的默认权限。示例演示了如何设置默认权限和解决权限不起作用的问题。
延伸解读
默认权限的常见误解
许多用户误以为设置默认权限后,所有新对象都会自动应用这些权限。但文章指出,默认权限仅当对象创建者与ALTER DEFAULT PRIVILEGES的执行者相同时才生效。如果不同角色创建对象,默认权限不会自动应用,导致权限拒绝错误。
FOR ROLE子句的关键作用
当多个角色创建对象时,必须使用FOR ROLE子句指定对象创建者。例如,ALTER DEFAULT PRIVILEGES FOR ROLE obj_creator GRANT SELECT ON TABLES TO obj_user,这样obj_creator创建的新表才会自动授予obj_user SELECT权限。这解决了默认权限不生效的问题。
默认权限的适用范围与限制
ALTER DEFAULT PRIVILEGES仅影响未来创建的对象,不影响现有对象。可设置权限的对象类型包括模式、表、序列、函数和类型。权限可以全局设置或针对特定模式。使用REVOKE可以撤销默认权限。
查看与管理默认权限
使用\ddp命令可以列出默认权限。也可以通过查询pg_default_acl系统表获取更详细的信息。合理使用ALTER DEFAULT PRIVILEGES可以自动化权限管理,减少手动授权操作,确保新对象对正确用户可访问。
Q&A
ALTER DEFAULT PRIVILEGES命令的主要功能是什么?
ALTER DEFAULT PRIVILEGES命令用于设置未来创建对象的默认权限。
默认权限如何影响新创建的对象?
默认权限仅适用于新创建的对象,不影响现有对象的权限。
如何确保特定用户在新表上获得所需权限?
通过指定对象创建者,可以确保特定用户在新表上获得所需权限。
ALTER DEFAULT PRIVILEGES命令可以更改哪些对象的权限?
ALTER DEFAULT PRIVILEGES语句可以更改模式、表、序列、函数和类型的默认权限。
如果对象创建者与ALTER DEFAULT PRIVILEGES的执行者不同,会发生什么?
如果对象创建者与ALTER DEFAULT PRIVILEGES语句的执行者不同,默认权限不会自动生效。
如何列出PostgreSQL中的默认权限?
可以使用ddp命令列出默认权限。