Как использовать postgresql ролей для подключения к базе данных? - PullRequest
2 голосов
/ 31 января 2020

Мы увидели PostgreSQL ролей в классе в этом году. Наш учитель сказал нам, что более безопасно использовать разные роли с пользовательскими правами для каждой таблицы или даже столбца, если это необходимо.

У нас есть проект, в котором мы должны использовать PostgreSQL для создания веб-сайта с ограниченным доступом для подключенных пользователей, которые могут быть разных типов (администратор, сотрудник, клиент). Чтобы следовать рекомендациям учителя, мы создали разные роли с разными правами (по одной для каждого типа пользователя).

Мы решили использовать Go для нашего бэкэнда (с авторизацией токена), но я не могу понять, как использовать наши роли, в которых больше групп, чем пользователей. Я прочитал в do c, что вы «открываете» соединение с БД раз и навсегда, но для этого вам нужно назначить роль PostgreSQL. Я не нашел способа изменить связанную роль без закрытия и повторного открытия БД. Если я запускаю приложение без изменения подключенных ролей, как может PostgreSQL контролировать, имеет ли пользователь право доступа к таблицам, которые ему нужны для запросов.

Ответы [ 2 ]

2 голосов
/ 31 января 2020

Вы можете менять роли на лету в PostgreSQL. Если вы вошли как nobody, а nobody является участником роли cleve, вы можете стать ролью admins с

SET ROLE cleve;

Но использование этого во время аутентификации проблематично c потому что ничто не мешает пользователю выполнить оператор

RESET ROLE;

, чтобы снова стать nobody и затем выдать себя за другого.

Как правило, есть два способа использования система ролей для использования разрешений базы данных:

  1. У вас есть персональный пользователь базы данных для каждого пользователя приложения.

    Это, конечно, возможно, только если набор пользователей является довольно постоянным и ограниченным.

    Тогда отдельные пользователи вообще не имеют никаких разрешений, и есть определенные роли, такие как admin, reader, accountant и так далее. Роли входа в систему получают разрешения, становясь членами одной или нескольких из этих ролей, и они наследуют свои разрешения.

  2. У вас нет персонализированных пользователей базы данных.

    Тогда у вас будет только одна роль входа в систему для каждого набора разрешений, скажем accountant, admin, viewer и т. Д.

    Приложение должно решить, к какому пользователю оно должно подключиться до установление соединения с базой данных. Если вам нужны запросы к базе данных для этого решения, вы выполняете их как пользователь базы данных nobody с очень ограниченными разрешениями. Например, он может вызывать функцию, которая проверяет введенный пользователем пароль.

0 голосов
/ 31 января 2020

Вы можете использовать команду set role для изменения роли во время открытого сеанса.

...