PostgreSQL:权限不足

时间:2018-05-27 08:02:27

标签: postgresql

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

 select * from pg_stat_activity

以查看在应用程序运行期间处理的SQL查询列表。

在"查询"我得到的专栏"特权不足"对于一些查询。你知道我能看到实际的SQL查询吗?

3 个答案:

答案 0 :(得分:2)

您必须以root用户身份运行查询才能查看所有查询。这通常是postgres用户。

在某些托管postgresql服务(AWS)上,对root用户的访问受到限制,并且无法通过设计查看该用户执行的查询。

通常,您的用户拥有的权限越多,您在pg_stat_activity

中可以看到的查询就越多

答案 1 :(得分: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 您可以找到类似方法的示例 here

答案 2 :(得分:0)

对此的一种可能的解决方法是,使用具有足够特权来查看数据的用户来定义MATERIALIZED VIEW,并向不具有特权的用户授予对该视图的访问权限。

缺点之一是视图所有者(或其他具有特权的用户)也必须使用REFRESH MATERIALIZED VIEW定期刷新视图。