Аналог sudo в PostgreSQL.
Всем привет! Сегодня небольшой пост о том как сделать в PostgreSQL реализацию sudo. То есть сделаем так чтобы непривелигированный пользователь при необходимости мог выполнять задачи в которых требуются привилегии SUPERUSER. Конечно же полученный результат не сравнится с оригинальным sudo, но тем не менее, дает простую возможность разграничения прав.Перед тем как начать, создадим тестовую базу, она пригодится нам чуть позже.
# CREATE DATABASE testdb;
Итак, создаем группу которая у нас и будет обладать SUPERUSER привилегиями, но будет недоступна для прямого доступа.
# CREATE ROLE administrators NOLOGIN SUPERUSER;
А теперь создаем пользователя который будет членом этой группы:
# CREATE ROLE vpupkin LOGIN IN ROLE administrators NOINHERIT PASSWORD 'Pa5sW0rD';
Вот и все ;)
Теперь проверим результат. Переключаемся в пользователя vpupkin и попробуем удалить тестовую базу:
# \c - vpupkin
You are now connected to database "postgres" as user "vpupkin".
> DROP DATABASE testdb;
ERROR: must be owner of database testdb
Как видим, ошибка, нужно быть владельцем базы или иметь SUPERUSER привилегии. Теперь переключаемся в роль administrators:
> SET ROLE administrators;
Обратите внимание символ приглашения сменился со стрелки на решетку.
# DROP DATABASE testdb;
DROP DATABASE
База удалена, сбрасываем права:
# RESET ROLE;
Вот так, легко и просто можно дать суперправа отдельным ролям. Достигается это за счет явного использования NOINHERIT. По умолчанию роль создается с INHERIT и если роль является членом групп, при входе ей будут автоматически выданны права этих групп. NOINHERIT отключает это поведение и для получения прав группы нужны использовать SET ROLE. Такие дела.
На главную "Virtualizing Linux"
Комментариев нет:
Отправить комментарий