PostgreSQL: 权限不足

12

我正在构建一个应用程序,使用postgreSQL作为数据库。当我运行应用程序时,我打开dbeaver并输入SQL查询:

 select * from pg_stat_activity

为了查看应用程序运行期间已处理的SQL查询列表。
在“查询”列中,对于某些查询,我得到了“权限不足”的提示。你知道我该怎么做才能看到实际的SQL查询吗?
4个回答

16
如果您正在使用 PostgreSQL 10 及以上版本,可以从超级用户账户 (postgres) 授予 pg_read_all_stats 角色给您的用户。
GRANT pg_read_all_stats TO username;

1
这就是我所冒的风险... 参见:postgresql.org/docs/10/default-roles.html只读用户访问pg-stat-activity - sol

8

要查看所有查询,您需要以root用户身份运行查询。通常使用的是postgres用户。

在某些托管postgresql服务(如AWS)中,访问root用户受到限制,设计上不可能查看由该用户执行的查询。

一般来说,您的用户拥有的特权越多,您就可以在pg_stat_activity中看到更多的查询。


谢谢。我如何在 DBeaver 中以 root 用户身份运行查询? - CrazySynthax
1
连接数据库时,请指定root用户的凭据。 - Haleemur Ali

2

不必以root用户身份运行查询。将某人授予root用户访问权限可能会带来非常严重的安全隐患,因为他们可以做任何事情。有一种解决方法是,您可以创建一个作为root的函数,该函数具有对pg_stat_statements的访问权限,然后授予只读用户对该函数的访问权限。例如:

CREATE OR REPLACE FUNCTION your_schema.get_stat_statements(showtext boolean = true) RETURNS SETOF pg_stat_statements AS
$$
  /* pganalyze-collector */ SELECT * FROM public.pg_stat_statements(showtext) LIMIT 100;
$$ LANGUAGE sql VOLATILE SECURITY DEFINER;

GRANT USAGE on SCHEMA your_schema TO  your_readonly_user;
GRANT EXECUTE on FUNCTION your_schema.get_stat_statements(boolean) TO your_readonly_user;

感谢您使用https://pganalyze.com/docs/install/amazon_rds/02_create_monitoring_user,您可以在这里找到类似方法的示例。

0

解决这个问题的一个可能的方法是使用具有足够权限查看数据的用户定义一个MATERIALIZED VIEW,并将对该视图的访问权限授予没有权限的用户。

其中一个缺点是需要定期使用REFRESH MATERIALIZED VIEW刷新视图,也由视图所有者(或其他具有权限的用户)执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接