Я пытаюсь настроить пользователя с ограниченными разрешениями, который сможет создавать сторонние таблицы. У меня есть две базы данных, 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
чтобы он мог создавать и удалять внешние таблицы?
ERROR: only superuser can change options of a file_fdw foreign table
сейчас… ☹️