Postgresql

拒絕查看超出其自身架構的權限

  • January 19, 2021

有兩種方案rohdaten_fiatstaging_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

您每次應該得到兩行或更多行。我故意省略了視圖的模式,以查看是否可能存在其他同名的視圖。

哦,請確保您的交易已送出。在這裡閱讀手冊。

這不是一個直接的答案,但它應該能讓你得到你的答案。

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