如何以超级用户身份查看pg_stat_activity中另一个会话的查询?


13

我有一个Postgresql 9.2数据库。在此数据库上创建两个用户。当我以超级用户身份执行以下查询时,我可以看到所有内容。

select * from pg_stat_activity

但是,是否可以在没有超级用户连接的情况下达到相同的结果?

我应该授予/创建哪个特权/角色以使超级用户可以看到结果?


在这一点上,没有授予权,它已硬编码给超级用户。最近在邮件列表中对此进行了讨论,如果有人有时间进行修改,可能会在9.5中进行更改。
Craig Ringer 2014年

Answers:


21

在这一点上,没有授予权,它已硬编码给超级用户。最近在邮件列表中对此进行了讨论,如果有人有时间进行修改,可能会在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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.