微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 权限。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。