Postgresql
如何在不成為超級使用者的情況下查看 pg_stat_activity 中另一個會話的查詢?
我有一個 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
其僅授予特定使用者或角色,該使用者或角色將充當監視的代理使用者。