Пользователи Postgresql 2 с разными разрешениями для определенной схемы

У меня есть база данных postgresql 11 с общедоступной схемой. У меня есть роль user1, которая имеет все привилегии в схеме public.

я бы хотел сделать следующее:

  • создать схему some_schema;
  • предоставить пользователю some_schema права только на чтение для пользователя user1;
  • создать роль user2, которая имеет все привилегии в схеме some_schema.

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

CREATE USER user2 WITH PASSWORD '***';
CREATE schema "some_schema";
GRANT CONNECT ON DATABASE user1 TO some_schema;
GRANT USAGE ON SCHEMA some_schema TO user1;
GRANT ALL ON SCHEMA some_schema to user2;

ALTER DEFAULT PRIVILEGES IN SCHEMA some_schema GRANT SELECT ON TABLES TO user1;

Это не работает, потому что, когда я вхожу в систему таким образом, а затем я создаю тестовую таблицу и выбираю, он помещает этого пользователя1, что отношение some_schema.test не существует:

создать таблицу some_shema.test (id int); \ q

psql -U user1; выберите * из some_schema.test;

result = ›отношения some_schema.test не существует.

Я также изменил pg_hba.conf, чтобы предоставить доступ к новой схеме обоим пользователям, и перезапустил сервер. Я безуспешно пытался прочитать документацию и многое другое. Может так я подключаюсь к базе данных?

Спасибо.


person batmaniac    schedule 26.07.2020    source источник
comment
Вы создали стол? Вы этого не показали ...   -  person sticky bit    schedule 26.07.2020
comment
Я сказал: тогда я создаю тестовую таблицу, так что да, я сделал. Отредактирую описание. Спасибо за переформатирование.   -  person batmaniac    schedule 26.07.2020
comment
кто создал тестовую таблицу? Тот же пользователь, который запускал ALTER DEFAULT PRIVILEGES или user2? Если это user2, то user2 необходимо предоставить выбор (или запустить изменение привилегий по умолчанию, или быть частью роли, содержащей всех пользователей, которым разрешено создавать таблицы в схеме)   -  person JGH    schedule 26.07.2020


Ответы (1)


Спасибо @JGH, вот и все. : user2 должен был предоставить себе доступ пользователю user1 к схеме some_shema. Что я сделал :

psql
CREATE USER user2 WITH PASSWORD '***';
\c my_database
CREATE SCHEMA some_schema AUTHORIZATION user2;
\c my_database user2
create table some_schema.test(id int);
insert into some_schema.t(100);
GRANT USAGE ON SCHEMA some_schema TO user1;
GRANT SELECT ON ALL TABLES IN SCHEMA some_schema TO user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA some_schema GRANT SELECT ON TABLES TO user1;

тогда :

\c my_database user1
select * from some_schema.t;

= ›Показывает результат 100 :)

person batmaniac    schedule 26.07.2020