GCLOUD Postgres,使用外部数据包装器扩展结果权限被拒绝关系
GCLOUD Postgres, using foreign data wrapper extesion results permission denied for relation
我真的被以下问题困住了。
在 GCloud SQL 我有一个 运行 postgres 的实例。
该实例包含两个数据库。从一个数据库 (source_db
) 我想使用 postgres_fdw
扩展访问另一个数据库的 (another_db
) table (foreign_table
)。我目前使用的食谱是:
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;
上面的命令运行没有错误,但是当我尝试实际访问 table 时,我得到了这个:
如果使用“外部”模式
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
唯一有点异味的是即使我使用的是外部架构,错误消息 (at *) 也会显示“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 and this other post 关于权限和授权。
- A Nice tutorial about authentication and authorization
P.S.
我能够在 运行 本地的 postgres 实例上完成此操作。
远程服务器上的用户 guest
没有从 table 访问 SELECT
的权限。由于远程服务器上的查询是作为用户 guest
执行的,因此您会收到错误消息。
GRANT
远程服务器 table 上的 SELECT
权限授予用户。
我真的被以下问题困住了。
在 GCloud SQL 我有一个 运行 postgres 的实例。
该实例包含两个数据库。从一个数据库 (source_db
) 我想使用 postgres_fdw
扩展访问另一个数据库的 (another_db
) table (foreign_table
)。我目前使用的食谱是:
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;
上面的命令运行没有错误,但是当我尝试实际访问 table 时,我得到了这个:
如果使用“外部”模式
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
唯一有点异味的是即使我使用的是外部架构,错误消息 (at *) 也会显示“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 and this other post 关于权限和授权。
- A Nice tutorial about authentication and authorization
P.S.
我能够在 运行 本地的 postgres 实例上完成此操作。
远程服务器上的用户 guest
没有从 table 访问 SELECT
的权限。由于远程服务器上的查询是作为用户 guest
执行的,因此您会收到错误消息。
GRANT
远程服务器 table 上的 SELECT
权限授予用户。