【发布时间】:2020-03-14 07:40:36
【问题描述】:
我有一个 Postgres 数据库和一个我想授予权限的只读用户。我目前有两个模式,但希望将来会做更多。如何向我的只读用户授予选择权限,以便他们可以从当前创建的表以及将来在新架构中创建的表中读取数据?
我不想在创建每个新架构时显式授予它们的权限。
【问题讨论】:
我有一个 Postgres 数据库和一个我想授予权限的只读用户。我目前有两个模式,但希望将来会做更多。如何向我的只读用户授予选择权限,以便他们可以从当前创建的表以及将来在新架构中创建的表中读取数据?
我不想在创建每个新架构时显式授予它们的权限。
【问题讨论】:
使用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;
【讨论】:
ERROR: permission denied for schema
GRANT USAGE。