我有一个 Postgresql 9.2 数据库。在此数据库上创建了两个用户。当我以超级用户身份执行以下查询时,我可以看到所有内容。
select * from pg_stat_activity
但是,是否可以在不以超级用户身份连接的情况下获得相同的结果?
我应该授予/创建哪个特权/角色以获得超级用户可以看到的结果?
我有一个 Postgresql 9.2 数据库。在此数据库上创建了两个用户。当我以超级用户身份执行以下查询时,我可以看到所有内容。
select * from pg_stat_activity
但是,是否可以在不以超级用户身份连接的情况下获得相同的结果?
我应该授予/创建哪个特权/角色以获得超级用户可以看到的结果?
在这一点上,没有授权,它被硬编码给超级用户。最近在邮件列表中对此进行了讨论,如果有人找到时间来处理它,可能会在 9.5 中更改。
作为一种解决方法,您可以创建一个
SECURITY DEFINER
由超级用户拥有的函数,并运行您想要的查询。这将允许非超级用户pg_stat_activity
通过调用该函数来查看 的内容。例如,以超级用户身份运行:
请注意,免费访问
pg_stat_activity
受到限制是有原因的。可以从其他人的查询中窥探敏感信息 - 例如,假设另一个用户正在使用 pgcrypto。与其将权限授予您,不如将public
其仅授予特定用户或角色,该用户或角色将充当监视的代理用户。从 PostgreSQL 10 开始,您可以授予角色
pg_read_all_stats
以实现所需的结果。