如何将PostgreSQL应用于所有表格?

正如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