Postgresql
如何防止登錄在 PostgreSQL 中“列出”表或視圖定義?
有沒有辦法阻止登錄列出架構中的表和列?
我必須授予對遠端登錄的訪問權限才能在單個視圖上進行查詢;但是,我還必須確保這樣的登錄不能列出該架構上的每個對象。
DENY VIEW ANY DEFINITION TO public;
PostgreSQL 上有類似 MS SQL SERVER 的東西嗎?
救援文件:
UPDATE
$$ … $$ 對於模式,允許訪問包含在指定模式中的對象(假設也滿足對象自身的權限要求)。本質上,這允許被授權者在模式中“查找”對象。如果沒有此權限,仍然可以查看對象名稱,例如通過查詢系統表。此外,在撤銷此權限後,現有後端可能具有先前執行此查找的語句,因此這不是防止對象訪問的完全安全的方法。
這意味著,除非
alice
足夠努力,否則以下內容將滿足您的要求:CREATE SCHEMA invisible; -- no privileges granted on this schema to alice or public CREATE VIEW invisible.iamnothere AS SELECT 'something not very interesting'::text AS data; GRANT SELECT ON TABLE invisible.iamnothere TO alice;
現在
alice
將看到以下內容(使用psql
,希望在其他客戶端中也一樣):SELECT * FROM invisible.iamnothere; data ──────────────────────────────── something not very interesting \dt invisible.* No matching relations found.
如果你是認真的
…關於防止您的使用者看到其他對象,它會稍微複雜一些。您必須處理文件中有關係統表訪問的通知。
首先,做
REVOKE ALL ON ALL TABLES IN SCHEMA pg_catalog FROM public, alice;
正如它所暗示的那樣,這對於能夠通過隱式成為成員
public
(所有角色都是後者的成員)來瀏覽模式的任何人都可能是破壞性的。要恢復他們的現狀(但不是alice
),您可以執行以下操作:CREATE ROLE object_browser; GRANT SELECT ON ALL TABLES IN SCHEMA pg_catalog TO object_browser; GRANT object_browser TO bob;
在此之後,
bob
將能夠列出東西,而差alice
則僅限於查詢單個視圖。