【问题标题】:postgres foreign data wrapper for non admin user非管理员用户的 postgres 外部数据包装器
【发布时间】:2017-04-17 19:45:15
【问题描述】:

我创建了一个外部数据包装器,并为 2 个用户创建了用户映射,一个是管理员,另一个只有对表的只读访问权限。 当我尝试使用只读用户查询时出现错误:

ERROR: permission denied for schema testing LINE 1: SELECT * FROM testing.bldg ^ ********** Error ********** ERROR: permission denied for schema testing SQL state: 42501 Character: 15

这是我的设置: Amazon RDS 中的 Postgres 9.6.1,两个数据库都是同一个 AWS RDS 实例的一部分。 当我使用只读用户直接连接到远程数据库时,我能够查询表,只有在使用 fdw 时才会出现问题。

当我查询这个“select * from pg_foreign_table;”时作为只读使用 我看到了所有的外表。

我尝试了以下方法:

grant usage on schema ...
grant select on table...
GRANT USAGE ON FOREIGN SERVER ...

任何想法。

【问题讨论】:

  • 只是为了确认 - 一旦您将远程只读用户切换到您的 user mapping 中的远程管理员用户而不更改任何其他内容,相同的查询又可以工作了吗?
  • 您创建的用户映射是什么?在psql 中尝试\deu+。远程数据库上的用户是否在架构上拥有 USAGE 权限?
  • # psql -U readonly_qa -h xx -d local_db psql (9.6.2, server 9.6.1) SSL连接(协议:TLSv1.2,密码:ECDHE-RSA-AES256-GCM-SHA384 , bits: 256, compression: off) local_db=> \deu+ 用户映射列表服务器 |用户名 | FDW 选项 -------------+-------------+-------- -------------------------------- remote_db_fdw |甘道夫 | (“用户”'gandalf',密码'king')remote_db_fdw |只读_qa | (“用户”'readonly_qa',密码'queen')remote_db_fdw1 |甘道夫 | (3 行)local_db=>
  • @LeoC 我有 2 个用户映射,当我说查询有效时,我的意思是我直接使用同一个用户连接到远程数据库,两个数据库都在同一个集群上,所以存在管理员和只读用户在同一个集群上。我将尝试删除只读用户的用户映射并查看。

标签: postgresql amazon-rds foreign-data-wrapper


【解决方案1】:

我已经解决了这个问题,步骤如下:

  1. 在本地数据库上创建只读用户
  2. 在远程数据库上创建只读用户
  3. 为只读用户创建 fdw 和用户映射
  4. 在远程和本地数据库上授予使用权限(我在本地缺少这个)
  5. 将本地和远程数据库上的选择权限授予只读用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    相关资源
    最近更新 更多