Отказано в доступе для стороннего сервера

8

Я пытаюсь настроить пользователя с ограниченными разрешениями, который сможет создавать сторонние таблицы. У меня есть две базы данных, hr_dbи accounting_db. Я создал hr_userпользователя для hr_dbи accounting_userпользователя для accounting_db. Я только хочу, чтобы accounting_userпользователь имел права выбора для некоторых hr_dbтаблиц, таких как usersтаблица. Для этого, как суперпользователь, я пошел в hr_dbбазу данных и запустил:

GRANT CONNECT ON DATABASE hr_db TO accounting_user;
GRANT SELECT ON people TO accounting_user;

Я установил соединение hr_dbс accounting_dbиспользованием сторонней оболочки данных:

CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'hr_db', port '5432');

Затем я добавил отображение для accounting_userпользователя:

CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');

Пароль для accounting_userтакой же, какой я использую для входа в систему из командной строки. Это прекрасно работает:

psql -U accounting_user -W hr_db
[enter accounting_user password]
SELECT * FROM people LIMIT 10;

Я могу создать обычную таблицу в accounting_dbбазе данных как accounting_userпользователь:

psql -U accounting_user -W accounting_db
[enter accounting_user password]
CREATE TABLE test (person_id integer NOT NULL);
DROP TABLE test;

Но если я попытаюсь создать чужую таблицу:

CREATE FOREIGN TABLE hr_people (person_id integer NOT NULL)
SERVER hr_db OPTIONS (table_name 'people');
ERROR:  permission denied for foreign server hr_db

Как суперпользователь, я могу создать hr_peopleстороннюю таблицу и accounting_userполучить к ней доступ. Таким образом, подключение к внешним данным hr_dbкажется правильным. Что еще мне нужно дать, accounting_userчтобы он мог создавать и удалять внешние таблицы?

Shaun
источник

Ответы:

10

Чтобы предоставить разрешения для стороннего сервера:

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

Более подробная информация доступна в примере на официальной странице https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.html.

Роман
источник
Это помогло с отказом в разрешении, но я получаю ERROR: only superuser can change options of a file_fdw foreign tableсейчас… ☹️
msciwoj
> Это помогло с отказом в разрешении, но я получаю ОШИБКУ: только суперпользователь может> изменить параметры внешней таблицы file_fdw сейчас ... Вам нужно подключиться к targettdb с суперпользователем и после использования гранта
Диего Скараваджи