Postgresql

如何查看角色的 postgres 權限來自何處?

  • May 6, 2021

我使用Google cloudsql 但這是一個更通用的 postgres 問題。

我有一個名為 cloudsqliamserviceaccount 的角色(已由 cloudsql 創建和管理)。

cloudsqliamserviceaccount 角色不是任何其他角色的成員。

每當我創建一個新的 postgres 使用者(通過 GCP 控制台或 gcloud)時,他們都會被添加到這個角色中。我無法將它們從角色中刪除,因為它會破壞 cloudsql IAM 集成。

cloudsqliamserviceaccount 角色具有非常全面的權限。它可以連接到所有數據庫並在所有數據庫上執行 CRUD。但我不確定如何查看其完整的權限列表。

總之我有這個角色“cloudsqliamserviceaccount”。我如何查看它可以訪問的內容?我為我創建的每個新數據庫自動獲取 CRUD,但它不是任何其他角色的成員。這個權限來自哪裡,我怎麼看?

權限儲存在單個對像上,並且沒有可以查看所有對象的中央視圖。

您可以使用每種對象的訪問權限查詢功能來獲取該資訊。

對於SELECT表、視圖、序列、複合類型或物化視圖,可能是:

SELECT oid::regclass, relkind
FROM pg_class
WHERE  has_any_column_privilege(
         'cloudsqliamserviceaccount'::regrole,
         oid,
         'SELECT'
      );

您需要對其他對像類型進行類似查詢。

請注意,這樣的查詢只會提供有關目前數據庫中對象的資訊,因此您必須依次在每個數據庫上執行它。

另一種粗略的方法是執行

DROP ROLE cloudsqliamserviceaccount;

這將為您提供一條錯誤消息並列出該角色在目前數據庫中擁有的一些權限。

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