正如GRANT SELECT对postgresql中所有表的问题所讨论的那样,从PG 9.0开始,可以使用如下命令对所有现有表批量授予用户u权限:
GRANT ALL ON ALL TABLES IN SCHEMA public TO u;
作为你login,你现在可以做到这一点预先存在的表a:
SELECT * FROM a;
但是,如果您现在创build表b并执行:
SELECT * FROM b;
你得到:
ERROR: permission denied for relation b SQL state: 42501
这可以通过重新执行来弥补
GRANT ALL ON ALL TABLES IN SCHEMA public TO u;
但是每次创build表之后,必须记住这样做是个问题。
有没有办法让PostgreSQL自动将这些全局授权应用到新创build的表中?
〜在此先感谢〜肯
一个可行的解决scheme是改变用户的默认权限:
例如:
alter default privileges in schema public grant all on tables to u; alter default privileges in schema public grant all on sequences to u;
描述
ALTER DEFAULT PRIVILEGES允许您设置将应用于将来创build的对象的权限。 (它不会影响分配给已经存在的对象的权限)。目前,只有表(包括视图),序列和函数的权限才能被改变。您只能更改将由您自己或您所属的angular色创build的对象的默认权限。 权限可以全局设置(即,对于在当前数据库中创build的所有对象),或者仅用于在指定模式中创build的对象。 为每个模式指定的默认权限被添加到特定对象types的全局默认权限。
正如在
GRANT下所解释的那样,任何对象types的默认特权通常都会将所有可授予的权限授予对象所有者,并且也可能授予一些特权给PUBLIC。 但是,可以通过使用ALTER DEFAULT PRIVILEGES更改全局默认权限来更改此行为。
请参阅: ALTER DEFAULT PRIVILEGES