Страницы

Сохранить статью у себя в соцсети:

понедельник, 10 марта 2014 г.

§ Simple sudo in Postgres.

Аналог 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"

Комментариев нет:

Отправить комментарий

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика