我有一个生产数据库,用户可以在其中创建一组继承主表X的表。问题是我想为所有表应用自动授权;
当然使用此命令:GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only ;
这只会应用于已创建的表。
目标是将命令应用于所有最新的表。
注意:我已经尝试在表pg_class上触发, pg_namespace但它是不可能的,对于pg_tables来说也是一样的 视图;
答案 0 :(得分:2)
您可以使用ALTER DEFAULT PRIVILEGES
命令为新创建的对象设置默认授权,例如:
ALTER DEFAULT PRIVILEGES
FOR USER creator_role IN SCHEMA public
GRANT SELECT ON TABLES TO read_only;
顺便说一句,虽然您无法在系统目录上安装触发器,但您可以使用event triggers实现相同的功能(在Postgres 9.3+中),这会触发任何CREATE
/ {{ 1}} / DROP
声明。