Добрый день, прошу помочь разобраться в назначении прав на конкретную БД на сервере postgresql.
Суть задачи - назначить права (например на чтение) пользователю к БД "целиком" за минимальное количество действий.
Прочитаны другие ответы, но не устраивает:
1) рекомендуют для настраиваемой БД сменить владельца на требуемого пользователя (мне кажется совсем плохо);
2) рекомендации настройки через групповую роль - по этой рекомендации сделал следующее
- создал обычного пользователя test
- создал групповую роль test_gr
- включил пользователя test в test_gr,
- создал БД test_db,
в БД test_db 2 схемы - public и test_sch, в каждой схеме - наборы таблиц
далее пробую дать права групповой роли test_gr к БД test, допустим все права
GRANT ALL PRIVILEGES on DATABASE test_db to test_gr;
при этом права к БД задаются, ответ на psql \l:
test_db | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | test_gr=CTc/postgres
для таблиц ответ на psql \z :
Права доступа
Схема | Имя | Тип | Права доступа | Права доступа к столбцам
--------+------+---------+---------------+--------------------------
public | tst1 | таблица | |
public | tst2 | таблица | |
при этом права на таблицы из схемы test_sch не отображаются в выводе вообще, запросы делаю от postgres ;
от пользователя test подключение к БД test_db возможно, но запрос к таблицам невозможен.
Вопрос - какой командой можно назначить права на БД, так чтобы разрешения для групповой или обычной роли распространялись и на все объекты БД ?
Или права должны назначаться на отдельные объекты БД ?
права должны назначаться на отдельные объекты БД
Всё верно, нужно назначать права на отдельные объекты.
Например, мы создали группу readonly_group которой и будете выдавать необходимые права.
CREATE ROLE readonly_group NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
Этой группе выдаем права на таблицы, представления, функции...если надо
например для схемы public :
Теперь добавляем пользователя loginr и назначаем его в эту группу:
таким образом права раздаем группе, а к группе привязываем или отвязываем пользователей.