GCP pg_stat_statements 权限和只读副本不足
GCP pg_stat_statements insufficient privileges and read replicas
我是 运行 GCP SQL 服务的 postgres。
我有一个主副本和一个只读副本。
我已经在主节点上启用了 pg_stat_statements,但我仍然收到消息说我几乎每一行都没有足够的权限。
当我尝试在只读副本上启用扩展时,它给了我一个错误:cannot execute CREATE EXTENSION in a read-only transaction
。
我尝试使用我拥有的最高权限用户执行的所有这些操作(使用 cloudsqlsuperuser
成员的用户,与默认 postgres
用户基本相同)
所以我有两个问题:
- 如何解决权限问题,以便在 table 中查看统计信息?
- 如何在只读副本上启用扩展?
谢谢!
在权限方面,cloudsqlsuperuser
不是真正的超级用户(但与您在 GCP cloudsql 中获得的一样接近)。因此,有时我发现我需要明确授予它访问对象/角色的权限才能访问事物。
因此我会尝试这样做:
GRANT pg_read_all_stats TO cloudsqlsuperuser;
不幸的是,我不太确定如何在只读副本上启用。
不过,您可能对最近发布的见解功能感兴趣 https://cloud.google.com/sql/docs/postgres/insights-overview - 我还不能正确使用它,但据我所知,它非常漂亮。
在 运行 对 postgres 9.6 进行了更多测试后,我还获得了消息 <insufficient privilege>
.
我在 postgres 9.6 和 13 上都有 运行 以下查询并获得了不同的结果:
SELECT userid, usename, query
FROM pg_stat_statements
INNER JOIN pg_catalog.pg_user
ON userid = usesysid;
我在 postgres 9.6 中注意到,我看不到的查询来自 roles/users cloudsqlagent 和 cloudsqladmin(预配置的 Cloud SQL postgres 角色)。
postgres 13 或更好地说 版本 10 和更高版本 不会发生这种情况,这是因为在使用 EXTENSION pg_stat_statements, SQL 来自所有用户的语句对具有 cloudsqlsuperuser 的用户可见。这是产品在不同版本之间的行为,在link.
的蓝色框中进行了描述
基本上只有在版本 9.6 中,来自所有用户的 SQL 语句 NOT 对 [=34] 的用户可见=]cloudsqlsuperuser角色。
So if I enable it on the master, it should be enabled on the replica
as well?
是的,在主服务器中启用扩展后,您可以连接到副本服务器并使用以下命令检查 pg_stat_statements 是否已启用:
SELECT * FROM pg_extension;
如果您希望在 postgres 版本之间有更统一的行为,或者如果您强烈需要来自所有用户的 SQL 语句对 cloudsqlsuperuser 角色可见,我建议您创建一个 public issue tracker使用模板功能请求。
我希望你觉得这有用。
我是 运行 GCP SQL 服务的 postgres。 我有一个主副本和一个只读副本。
我已经在主节点上启用了 pg_stat_statements,但我仍然收到消息说我几乎每一行都没有足够的权限。
当我尝试在只读副本上启用扩展时,它给了我一个错误:cannot execute CREATE EXTENSION in a read-only transaction
。
我尝试使用我拥有的最高权限用户执行的所有这些操作(使用 cloudsqlsuperuser
成员的用户,与默认 postgres
用户基本相同)
所以我有两个问题:
- 如何解决权限问题,以便在 table 中查看统计信息?
- 如何在只读副本上启用扩展?
谢谢!
在权限方面,cloudsqlsuperuser
不是真正的超级用户(但与您在 GCP cloudsql 中获得的一样接近)。因此,有时我发现我需要明确授予它访问对象/角色的权限才能访问事物。
因此我会尝试这样做:
GRANT pg_read_all_stats TO cloudsqlsuperuser;
不幸的是,我不太确定如何在只读副本上启用。
不过,您可能对最近发布的见解功能感兴趣 https://cloud.google.com/sql/docs/postgres/insights-overview - 我还不能正确使用它,但据我所知,它非常漂亮。
在 运行 对 postgres 9.6 进行了更多测试后,我还获得了消息 <insufficient privilege>
.
我在 postgres 9.6 和 13 上都有 运行 以下查询并获得了不同的结果:
SELECT userid, usename, query
FROM pg_stat_statements
INNER JOIN pg_catalog.pg_user
ON userid = usesysid;
我在 postgres 9.6 中注意到,我看不到的查询来自 roles/users cloudsqlagent 和 cloudsqladmin(预配置的 Cloud SQL postgres 角色)。
postgres 13 或更好地说 版本 10 和更高版本 不会发生这种情况,这是因为在使用 EXTENSION pg_stat_statements, SQL 来自所有用户的语句对具有 cloudsqlsuperuser 的用户可见。这是产品在不同版本之间的行为,在link.
的蓝色框中进行了描述基本上只有在版本 9.6 中,来自所有用户的 SQL 语句 NOT 对 [=34] 的用户可见=]cloudsqlsuperuser角色。
So if I enable it on the master, it should be enabled on the replica as well?
是的,在主服务器中启用扩展后,您可以连接到副本服务器并使用以下命令检查 pg_stat_statements 是否已启用:
SELECT * FROM pg_extension;
如果您希望在 postgres 版本之间有更统一的行为,或者如果您强烈需要来自所有用户的 SQL 语句对 cloudsqlsuperuser 角色可见,我建议您创建一个 public issue tracker使用模板功能请求。
我希望你觉得这有用。