正如在GRANT SELECT 对 postgresql 中的所有表的问题中所讨论的那样,从 PG 9.0 开始,您可以使用如下命令将所有现有表的权限批量授予用户 u:
GRANT ALL ON ALL TABLES IN SCHEMA public TO u;
Run Code Online (Sandbox Code Playgroud)
以 u 身份登录,您现在可以对预先存在的表 a 执行此操作:
SELECT * FROM a;
Run Code Online (Sandbox Code Playgroud)
但是,如果您现在创建表 b 并执行以下操作:
SELECT * FROM b;
Run Code Online (Sandbox Code Playgroud)
你得到:
ERROR: permission denied for relation b
SQL state: 42501
Run Code Online (Sandbox Code Playgroud)
这可以通过重新执行来解决
GRANT ALL ON ALL TABLES IN SCHEMA public TO u;
Run Code Online (Sandbox Code Playgroud)
但是每次创建表后都必须记住这样做是一个问题。
有没有办法让 PostgreSQL 自动将这些全局授权应用于新创建的表?
~ 提前致谢 ~ 肯