我有一个Postgres数据库和一个我要授予权限的只读用户。我目前有两种模式,但希望将来会更多。如何授予只读用户选择权限,以便他们可以从当前创建的表以及将来将在新架构中创建的表中读取数据?
我不想在创建每个新架构时显式授予权限。
答案 0 :(得分:1)
使用ALTER DEFAULT PRIVILEGES
而不指定任何架构:
可以全局设置特权(即,针对当前数据库中创建的所有对象)[…] 如果省略
IN SCHEMA
,则会更改全局默认权限。
所以应该这样做:
ALTER DEFAULT PRIVILEGES FOR whoever_will_create_the_tables
GRANT SELECT ON TABLES TO the_readonly_user;
ALTER DEFAULT PRIVILEGES FOR whoever_will_create_the_schemas
GRANT USAGE ON SCHEMAS TO the_readonly_user;
Granting对已创建的表的特权需要单独的语句:
GRANT SELECT ON ALL TABLES IN SCHEMA schema_1, schema_2 TO the_readonly_user;