簡體   English   中英

DEFAULT PRIVILEGES 語句是否可能由另一個非超級用戶角色所有?

[英]Is it possible for DEFAULT PRIVILEGES statements to be owned by another non-superuser role?

我是一個偶然的 DBA,在我們試圖不讓任何個人員工用戶擁有任何東西的環境中。 (這樣我們就可以在需要時對員工的訪問權限 DROP ROLE,而無需先研究/重新歸位大量對象。)

我們還試圖確保我們可以盡可能自動化與新創建的對象相關的訪問權限。

員工可以訪問 CREATE 對象,因為他們處於所有權角色中,該角色對他們被允許的模式具有 CREATE 權限。 如果一個員工需要創建一個新對象,SOP是在執行CREATE事務之前給所有權角色SET ROLE,因為所有權角色設置了DEFAULT PRIVILEGES語句,以確保他們創建的新對象對不同的組擁有正確的權限需要不同級別訪問權限的員工。

如果員工不遵守 SOP 並忘記事先設置角色,他們的角色有權創建對象(因為他們是擁有角色的成員),但除非他們還記得授予他們,否則它不會擁有正確的權限.

解決方案似乎是為每個用戶編寫 DEFAULT PRIVILEGES 語句,以反映為擁有角色設置的那些語句。 但是,我們發現,即使這些 DEFAULT PRIVILEGES 是為用戶角色在第二個管理角色中創建的對象編寫的,這些權限本身仍然歸第一個角色所有。 這違反了我們試圖建立的設計。

我認為我們已經遇到了 Postgres 架構的一個基本現實; 似乎我們不能同時允許員工可​​以(無意)在他們自己的角色下創建對象允許這些對象具有默認權限的系統,除非我們願意允許這些角色擁有默認權限。

那正確嗎? 我們是否想擁有我們的蛋糕並也吃它?


對於其他上下文:

我的團隊中沒有人有權訪問數據庫的超級用戶權限; 必須從 IT 請求超級用戶下的任何內容。 (所以我們試圖避免需要超級用戶權限的系統。)

一種解決方案是定義這樣的角色:

-- role that can create tables
CREATE ROLE table_owner NOLOGIN;
-- because it has the permission on the schema
GRANT CREATE ON SCHEMA myschema TO table_owner;

-- role that can do INSERT, SELECT, UPDATE, DELETE
CREATE ROLE dml_role NOLOGIN;
-- give it permissions
GRANT INSERT, SELECT, UPDATE, DELETE
   ON ALL TABLES IN SCHEMA myschema TO dml_role;
-- also for future tables
ALTER DEFAULT PRIVILEGES FOR table_owner IN SCHEMA myschema
   GRANT INSERT, SELECT, UPDATE, DELETE ON TABLES TO dml_role;

-- intermediary role that does *not* inherit privileges
CREATE ROLE break_inherit NOLOGIN NOINHERIT IN ROLE table_owner;

-- end user
CREATE ROLE enduser LOGIN IN ROLE dml_role, break_inherit;

現在enduser無法直接在myschema創建表,因為它不繼承自該角色。 所以enduser只能先創建一張它的表SET ROLE table_owner

但是enduser自動擁有使用myschema中屬於table_owner的表的權限,因為它繼承自dml_role

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM