Bagaimana cara melihat kueri sesi lain di pg_stat_activity tanpa menjadi pengguna super?

13

Saya memiliki database Postgresql 9.2. Dua pengguna dibuat di database ini. Ketika saya melakukan permintaan berikut sebagai pengguna super, saya bisa melihat semuanya.

select * from pg_stat_activity

Namun, mungkinkah mencapai hasil yang sama tanpa terhubung sebagai superuser?

Hak istimewa / peran apa yang harus saya berikan / ciptakan untuk mendapatkan hasil yang bisa dilihat oleh pengguna super?

Stephan
sumber
Pada titik ini, tidak ada hak untuk memberikan, itu dikodekan ke superuser. Itu telah dibahas di milis akhir-akhir ini, dan dapat berubah menjadi 9,5 jika seseorang menemukan waktu untuk mengerjakannya.
Craig Ringer

Jawaban:

20

Pada titik ini, tidak ada hak untuk memberikan, itu dikodekan ke superuser. Itu telah dibahas di milis akhir-akhir ini, dan dapat berubah menjadi 9,5 jika seseorang menemukan waktu untuk mengerjakannya.

Sebagai solusinya, Anda bisa membuat SECURITY DEFINERfungsi yang dimiliki oleh superuser, dan menjalankan kueri yang Anda inginkan. Ini akan memungkinkan non-pengguna super untuk melihat konten pg_stat_activitydengan memanggil fungsi.

Misalnya, jalankan sebagai pengguna super:

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;

Perhatikan bahwa akses gratis ke pg_stat_activitydibatasi karena suatu alasan. Mungkin untuk mengintip informasi sensitif dari pertanyaan orang lain - bayangkan misalnya jika pengguna lain menggunakan pgcrypto. Daripada memberikan hak kepada publicAnda, Anda harus memberikannya hanya kepada pengguna atau peran tertentu yang bertindak sebagai pengguna pengganti untuk pemantauan.

Craig Ringer
sumber
Terima kasih! Sedang mencoba mencari cara untuk memberikan izin akun monitor untuk membaca dari pg_stat_activity tanpa memberikan SUPERUSER.
epic_fil
3

Dimulai dengan PostgreSQL 10 Anda dapat memberikan peran pg_read_all_statsuntuk mencapai hasil yang diinginkan.

Radu Dumbrăveanu
sumber