Postgresql

如何在不成為超級使用者的情況下查看 pg_stat_activity 中另一個會話的查詢?

  • April 20, 2019

我有一個 Postgresql 9.2 數據庫。在此數據庫上創建了兩個使用者。當我以超級使用者身份執行以下查詢時,我可以看到所有內容。

select * from pg_stat_activity

但是,是否可以在不以超級使用者身份連接的情況下獲得相同的結果?

我應該授予/創建哪個特權/角色以獲得超級使用者可以看到的結果?

在這一點上,沒有授權,它被硬編碼給超級使用者。最近在郵件列表中對此進行了討論,如果有人找到時間來處理它,可能會在 9.5 中更改。

作為一種解決方法,您可以創建一個SECURITY DEFINER由超級使用者擁有的函式,並執行您想要的查詢。這將允許非超級使用者pg_stat_activity通過呼叫該函式來查看 的內容。

例如,以超級使用者身份執行:

CREATE FUNCTION get_sa() RETURNS SETOF pg_stat_activity AS
$$ SELECT * FROM pg_catalog.pg_stat_activity; $$
LANGUAGE sql
VOLATILE
SECURITY DEFINER;

CREATE VIEW pg_stat_activity_allusers AS SELECT * FROM get_sa();

GRANT SELECT ON pg_stat_activity_allusers TO public;

請注意,免費訪問pg_stat_activity受到限制是有原因的。可以從其他人的查詢中窺探敏感資訊 - 例如,假設另一個使用者正在使用 pgcrypto。與其將權限授予您,不如將public其僅授予特定使用者或角色,該使用者或角色將充當監視的代理使用者。

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