Postgresql

如何將 PostgreSQL“GRANT ALL ON ALL TABLES”應用於新表?

  • January 4, 2015

正如GRANT SELECT to all tables in postgresql的問題中所討論的,從 PG 9.0 開始,您可以使用以下命令將所有現有表的權限大量授予使用者 u:

GRANT ALL ON ALL TABLES IN SCHEMA public TO u;

以 u 身份登錄,您現在可以對預先存在的表 a 執行此操作:

SELECT * FROM a;

但是,如果您現在創建表 b 並執行以下操作:

SELECT * FROM b;

你得到:

ERROR: permission denied for relation b
SQL state: 42501

這可以通過重新執行來解決

GRANT ALL ON ALL TABLES IN SCHEMA public TO u;

但是每次創建表後都必須記住這樣做是一個問題。

有沒有辦法讓 PostgreSQL 自動將這些全域授權應用於新創建的表?

〜提前感謝〜肯

一個可能的解決方案是更改u使用者的預設權限:

例如:

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允許您設置將應用於將來創建的對象的權限。(它不影響分配給已存在對象的權限。)目前,只能更改表(包括視圖)、序列和函式的權限。

您只能更改將由您自己或您所屬的角色創建的對象的預設權限。權限可以全域設置(即,針對在目前數據庫中創建的所有對象),或僅針對在指定模式中創建的對象。為每個模式指定的預設權限將添加到特定對像類型的全域預設權限中。

如下所述GRANT,任何對像類型的預設權限通常都會向對象所有者授予所有可授予的權限,並且也可能授予某些權限PUBLIC。但是,可以通過使用 更改全域預設權限來更改此行為ALTER DEFAULT PRIVILEGES

請參閱:更改預設權限

引用自:https://serverfault.com/questions/656218