Ste*_*han 15 postgresql permissions role postgresql-9.2
我有一个 Postgresql 9.2 数据库。在此数据库上创建了两个用户。当我以超级用户身份执行以下查询时,我可以看到所有内容。
select * from pg_stat_activity
Run Code Online (Sandbox Code Playgroud)
但是,是否可以在不以超级用户身份连接的情况下获得相同的结果?
我应该授予/创建哪个权限/角色以获得超级用户可以看到的结果?
Cra*_*ger 25
在这一点上,没有授予的权利,它被硬编码为超级用户。最近在邮件列表中讨论了这一点,如果有人有时间处理它,可能会在 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;
Run Code Online (Sandbox Code Playgroud)
请注意,pg_stat_activity出于某种原因限制了免费访问。可以从其他人的查询中窥探敏感信息 - 例如,假设另一个用户正在使用 pgcrypto。public不应向您授予权限,而应仅向充当监视代理用户的特定用户或角色授予权限。
| 归档时间: |
|
| 查看次数: |
10190 次 |
| 最近记录: |