我使用postgreSQL作为我构建的应用程序的数据库。当我运行应用程序时,我打开dbeaver并输入SQL查询:
select * from pg_stat_activity
以查看在应用程序运行期间处理的SQL查询列表。
在"查询"我得到的专栏"特权不足"对于一些查询。你知道我能看到实际的SQL查询吗?
答案 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
定期刷新视图。