Postgresql
拒絕查看超出其自身架構的權限
有兩種方案
rohdaten_fiat
和staging_fiat
。我基於第一個在後一個中創建了一個視圖。CREATE VIEW staging_fiat.udz_odx_dtcs AS SELECT * FROM rohdaten_fiat.udz_odx_relational_dtcs;
在保持數據庫連接活動的同時,我可以訪問視圖,例如
SELECT * FROM staging_fiat.udz_odx_dtcs;
它在以下參數下執行:
SELECT current_user, current_setting('search_path'::text) AS search_path , relowner::regrole, relnamespace::regnamespace, relname, relacl , pg_get_viewdef(c.oid) AS view_definition FROM pg_class c WHERE relname = 'udz_odx_dtcs' OR relname = 'udz_odx_relational_dtcs';
見:https ://pastebin.com/Hn7jAUat
但是,關閉連接並重新連接到數據庫後,我不能:
SELECT * FROM staging_fiat.udz_odx_dtcs;
ERROR: permission denied for relation view
環境參數相同(參見https://pastebin.com/Hn7jAUat)。奇怪的是,我可以手動執行視圖的查詢:
SELECT * FROM rohdaten_fiat.udz_odx_relational_dtcs;
只有視圖不起作用。權限在哪裡失去?為什麼?
它是 PostgreSQL 10.12。包括 的連接
search_path
是完全一樣的。
要進行診斷,請在您的問題重新連接之前和之後檢查此查詢的輸出:
SELECT current_user, current_setting('search_path'::text) AS search_path , relowner::regrole, relnamespace::regnamespace, relname, relacl , pg_get_viewdef(c.oid) AS view_definition FROM pg_class c WHERE relname = 'view' -- actual view name OR (relname = 'table' AND relnamespace = 'schema1'); -- actual table & schema name
您每次應該得到兩行或更多行。我故意省略了視圖的模式,以查看是否可能存在其他同名的視圖。
哦,請確保您的交易已送出。在這裡閱讀手冊。
這不是一個直接的答案,但它應該能讓你得到你的答案。