スーパーユーザーにならずにpg_stat_activityで別のセッションのクエリを表示するにはどうすればよいですか?


13

Postgresql 9.2データベースがあります。このデータベースに2人のユーザーが作成されます。スーパーユーザーとして次のクエリを実行すると、すべてが表示されます。

select * from pg_stat_activity

ただし、スーパーユーザーとして接続せずに同じ結果を達成することは可能ですか?

スーパーユーザーが表示できる結果を得るには、どの特権/ロールを付与/作成する必要がありますか?


この時点では、付与する権利はなく、スーパーユーザーにハードコーディングされています。これは最近メーリングリストで議論されており、誰かがそれに取り組む時間を見つけた場合、9.5で変更されるかもしれません。
クレイグリンガー14

回答:


20

この時点では、付与する権利はなく、スーパーユーザーにハードコーディングされています。これは最近メーリングリストで議論されており、誰かがそれに取り組む時間を見つけた場合、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付与するのではなく、監視の代理ユーザーとして機能する特定のユーザーまたはロールにのみ権限を付与する必要があります。


ありがとう!SUPERUSERを付与せずにpg_stat_activityから読み取る許可をモニターアカウントに与える方法を見つけようとしていました。
epic_fil

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.