GCLOUD Postgres,使用外部数据包装扩展结果权限拒绝关系

问题描述

我真的被以下问题困住了。

在 GCloud sql 我有一个正在运行的 postgres 实例。 该实例包含两个数据库。从一个数据库 (source_db) 我想使用 another_db 扩展访问另一个数据库的 (foreign_table) 表 (postgres_fdw)。我目前使用的配方是这样的:

1)

CREATE EXTENSION postgres_fdw; 
CREATE SERVER foreign_db
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'another_db',port '5432',host '<A_PRIVATE_IP>'); 
CREATE USER MAPPING for guest
SERVER foreign_db
OPTIONS (user 'guest',password 's3cr3t'); 
CREATE FOREIGN TABLE foreign_table
(
 // columns descripions
)
SERVER foreign_db OPTIONS (table_name 'foreign_table');

-- Alternatively I also tried with
CREATE SCHEMA external;
IMPORT FOREIGN SCHEMA public from SERVER foreign_db into external;
GRANT SELECT ON TABLE foreign_table TO guest;

上面的命令运行没有错误,但是当我尝试实际访问表时,我得到了这个:

如果使用“外部”架构

source_db=> select 1 from external.foreign_table limit 1;
ERROR:  permission denied for relation foreign_table
CONTEXT:  Remote sql command: SELECT NULL FROM public.foreign_table (*)

如果不使用“外部”架构

source_db=> select 1 from foreign_table limit 1;
ERROR:  permission denied for relation foreign_table
CONTEXT:  Remote sql command: SELECT NULL FROM public.foreign_table

唯一有点味道的是错误消息(在 * 处)显示“public.foreign_table”而不是“external.foreign_table”,即使我使用的是外部架构......但我不知道是这实际上意味着什么:S

据我研究,无法以超级用户身份登录 posgres 实例,因为 Gcloud 的 sql 服务不允许这样做,也无法编辑 pg_hba.conf 文件以调整客户端的身份验证事务。>

搜索了很多地方,但没有找到我可以做些什么来解决这个问题。在我查看的网站和页面中,有以下列表

附言

我能够在本地运行的 postgres 实例上完成此操作。

解决方法

远程服务器上的用户 guest 无权访问表中的 SELECT。由于远程服务器上的查询是以用户 guest 执行的,因此您会收到错误消息。

GRANT 用户对远程服务器上表的 SELECT 权限。