Обертка внешних данных postgres для пользователя без администратора

Я создал оболочку сторонних данных и создал сопоставления пользователей для двух пользователей, один из которых является администратором, а другой имеет доступ только для чтения к таблицам. Когда я пытаюсь выполнить запрос, используя пользователя только для чтения, я получаю сообщение об ошибке:

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

Вот моя установка: Postgres 9.6.1 в Amazon RDS, обе БД являются частью одного экземпляра AWS RDS. Когда я подключаюсь к удаленной базе данных напрямую, используя пользователя только для чтения, я могу запросить таблицу, проблема возникает только при использовании fdw.

Как только для чтения, когда я запрашиваю это «select * from pg_foreign_table;» Я вижу все зарубежные столы.

Я пробовал следующее:

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

Любые идеи.


person virtual void    schedule 17.04.2017    source источник
comment
Просто чтобы подтвердить - после того, как вы переключили удаленного пользователя только для чтения на пользователя удаленного администратора в вашем user mapping, ничего не меняя, тот же запрос снова будет работать?   -  person Leo C    schedule 18.04.2017
comment
Какие сопоставления пользователей вы создали? Попробуйте \deu+ в psql. Имеет ли пользователь удаленной базы данных право USAGE на схему?   -  person Laurenz Albe    schedule 18.04.2017
comment
# psql -U readonly_qa -h xx -d local_db psql (9.6.2, сервер 9.6.1) SSL-соединение (протокол: TLSv1.2, шифр: ECDHE-RSA-AES256-GCM-SHA384, биты: 256, сжатие: выкл. ) local_db = ›\ deu + Список сопоставлений пользователей Сервер | Имя пользователя | Параметры FDW ------------- + ------------- + -------------------- -------------------------------- remote_db_fdw | гэндальф | (пользователь 'gandalf', пароль 'king') remote_db_fdw | readonly_qa | (пользователь readonly_qa, пароль queen) remote_db_fdw1 | гэндальф | (3 строки) local_db = ›   -  person virtual void    schedule 18.04.2017
comment
@LeoC У меня есть 2 сопоставления пользователей, когда я сказал, что запрос сработал, я имел в виду, что подключился к удаленной БД напрямую, используя одного и того же пользователя, обе БД находятся в одном кластере, поэтому пользователи с правами администратора и только для чтения существуют в одном кластере. Я попытаюсь удалить отображение пользователя, доступное только для чтения, и посмотрю.   -  person virtual void    schedule 18.04.2017


Ответы (1)


Мне удалось решить проблему, вот шаги:

  1. создать пользователя только для чтения в локальной БД
  2. создать пользователя только для чтения в удаленной БД
  3. создать fdw и сопоставление пользователей для пользователя только для чтения
  4. предоставить права использования на удаленном и локальном БД (мне не хватало этого на локальном)
  5. предоставить привилегии выбора на локальных и удаленных базах данных пользователю только для чтения.
person virtual void    schedule 18.04.2017