Я вошел в свою базу данных как владелец базы данных (в том числе суперпользователь) и создал роль role_write
с флагами nologin и noinherit.
Я отменил разрешения на создание по умолчанию для публикисхема с:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
и аннулировал публичный доступ к базе данных с:
REVOKE ALL ON DATABASE mydb FROM PUBLIC;
Я предоставил роли для каждой таблицы. Я хочу, чтобы эта роль имела права на чтение и запись,Используя таблицу user
для этого примера, я добавил:
grant insert, select, update, delete on users to role_write;
Затем я также дал пользователю надлежащие разрешения для таблиц, схемы, последовательностей и подключения к базе данных и изменил привилегии по умолчанию с помощью:
GRANT CONNECT ON DATABASE my to role_write;
grant usage on schema public to role_write;
grant select, insert, update, delete on all tables in schema public to role_write;
grant usage, select on all sequences in schema public to role_write;
alter default privileges in schema public
grant select, insert, update, delete on tables to role_write;
alter default privileges in schema public
grant usage, select on sequences to role_write;
Я также создал нового пользователя (с флагом noinherit) и добавил к нему роль role_write с помощью:
grant role_write to newuser;
Затем я вошел в систему как этот пользователь, выполнив команду:
set role role_write;
Затем, чтобы быть в безопасности, я перезапустил postgres.
Но даже после всего этого, когда я пытаюсь подключиться к базе данных через сервер sequelize / apollo как newuser и запуститьзапрос, я получаю ошибку:
permission denied for table users
Я понятия не имею, что я сделал не так.Если я проверяю привилегии пользовательской таблицы, это показывает, что role_write настроен правильно.
Любая помощь?
EDIT: Итак, я понял, что мне нужно запуститьset role role_write
на каждом сеансе, а не только один раз.Если я подключаюсь к базе данных и сразу же запускаю запрос, я получаю сообщение об ошибке, однако, если я сначала задаю роль, то это позволяет мне.
Так что мой вопрос сейчас ...
Как мне получить sequelize / apollo для добавления set role role_write;
для каждого нового соединения с базой данных?