如何解决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 文件以调整客户端的身份验证事务。>
我搜索了很多地方,但没有找到我可以做些什么来解决这个问题。在我查看的网站和页面中,有以下列表
- The official documentation
- A personal blog's post
- This other SO post having a related issue
- This post 和 this other post 关于权限和授权。
- A Nice tutorial about authentication and authorization
附言
我能够在本地运行的 postgres 实例上完成此操作。
解决方法
远程服务器上的用户 guest
无权访问表中的 SELECT
。由于远程服务器上的查询是以用户 guest
执行的,因此您会收到错误消息。
GRANT
用户对远程服务器上表的 SELECT
权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。