назначение прав роли на БД

Добрый день, прошу помочь разобраться в назначении прав на конкретную БД на сервере 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 :

GRANT SELECT ON ALL TABLES IN SCHEMA public TO GROUP readonly_group;
GRANT EXECUTE ON ALL functions IN SCHEMA public TO GROUP readonly_group;

Теперь добавляем пользователя loginr и назначаем его в эту группу:

CREATE ROLE loginr LOGIN UNENCRYPTED PASSWORD '12345678';
GRANT readonly_group TO loginr;

таким образом права раздаем группе, а к группе привязываем или отвязываем пользователей.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023