Postgresql

在 AUTHORIZATION 中使用多使用者在 db 中創建 postgres 模式

  • August 5, 2015

是否可以在同一個數據庫中創建一個由多個使用者擁有或訪問的模式?

我正在閱讀postgres create schema文件和postgres alter schema文件,並且沒有提供多個使用者的語法。

我也在Google上搜尋這樣一個解決方案,無論是簡單的還是困難的,但什麼也沒找到,甚至沒有任何解決方法的一個點。

請您給我指出一個解決方案或可能的解決方法,或者讓我確定,這樣的事情無論如何都是不可能的?

由多個使用者擁有:否

由多個使用者訪問:是

要讓使用者(或角色)訪問架構中的表,您可以使用以下內容:

grant all on schema foobar to role_name;
grant all on all tables in schema foobar to role_name;
grant all on all sequences in schema foobar to role_name;
grant all on all functions in schema foobar to role_name;

grant all on schema授予這兩個權限並usagecreate該架構上。引用手冊:“允許訪問包含在指定模式中的對象(假設也滿足對象自己的特權要求)。本質上,這允許被授權者“查找”模式中的對象“。但這並不授予從架構*內的表中選擇數據的特權。*所以以上四個陳述都是必要的。如果您不希望使用者創建新對象,那麼您將使用grant usage on schema ....

如果您需要為多個使用者執行此操作,則將其授予一個角色然後將該角色授予各個使用者可能更容易。

如果要將授權擴展到任何新創建的表(或其他對象),則需要更改架構的預設權限:

alter default privileges in schema foobar grant all on tables to role_name;
alter default privileges in schema foobar grant all on sequences to role_name;
alter default privileges in schema foobar grant all on functions to to role_name;
alter default privileges in schema foobar grant all on types to role_name;

如果您沒有在自動送出模式下執行,請不要忘記送出這些語句。

當然,如果您只希望這些使用者訪問對象,請根據對像類型以及您希望允許的內容替換ALL關鍵字SELECT或使用它們。SELECT,INSERT,UPDATE

您可能還想為這些使用者設置預設的 search_path(如果他們只需要訪問該單一模式)以避免必須完全限定對象名稱

引用自:https://dba.stackexchange.com/questions/108967