Новый инструмент для GreenPlum и PosgreSQL

Новый инструмент для GreenPlum и PosgreSQL

Работа в DNS - подписывайся!

В DNS для задач аналитики используется GreenPlum. GreenPlum — это горизонтально-масштабируемая MPP версия PostgreSQL. Для того, чтобы доставить до аналитика данные с "боевой" БД, используется множество инструментов. Мы расскажем про инструмент управления правами пользователей и ресурсными группами, который был разработан в DNS .

С чего все начиналось

Для инженера данных управление правами доступа к объектам БД является рутиной: количество объектов в БД растет, пользователи добавляются... Стандартным решением этой задачи является написание SQL-скриптов. Но насколько масштабируемое это решение? Есть ли более удобный вариант управления правами? Поиск ответа на эти вопросы выявил необходимость реализации собственного решения.

Итогом разработки стал GreenPlum Permission Manager (далее — GPPM)

GreenPlum Permission Manager (сокр. GPPM) — приложение с web-интерфейсом, предоставляющее следующий функционал:

 • Управление ролями (создание, изменение, удаление)

• Управление группами ролей (добавление, исключение)

• Представление ролей и связей между ними в виде графа и таблицы

• Выдача прав роли (на чтение, редактирование и т. д.): БД, схемы и конкретной таблицы

• Просмотр итоговых прав роли на объект: БД, схему, таблицу

• Просмотр дефолтных прав роли для выбранной базы

• Управление ресурсными группами (создание, изменение, удаление)

• Управление членами ресурсной группы (добавление, исключение)

• Аутентификация пользователя в GUI по email и паролю (поддерживается LDAP)

• Поддержка переключения между несколькими СУБД

• Разграничение прав редактирования СУБД через GUI (до уровня роли, базы, схемы)

Продукт уже выложен на github!



Демонстрация


Для краткого знакомства запустим GPPM через Docker:

docker run -it --rm \

   -p 80:80 -p 8080:8080 \

   -v gppm-data:/var/lib/postgresql/9.6 \

   -e SECRET_KEY=HF2IxPeglDZdEVp4702u4mxOpoNcInXnZj80d1Ab \

   -e ENCODING_KEY=SCW2TcT1ko4RaTEXFDXmSsGPIRey0kvNvJz8v0zO73k= \

   ostapkonst/gppm

 

Заходим на http://localhost и вводим данные аутентификации:

email: admin@gppm.com

password: admin

 

Далее нужно создать контекст, т. е. соединение с СУБД.

После создания контекста произойдет автоматическое переключение на него. Активируются дополнительные пункты меню. С их помощью реализуется описанный выше функционал.

Примеры

Как выдать права на чтение всех таблиц в схеме для роли?

Ситуация стандартная: пришел новый пользователь, требуется создать роль и выдать права.

Создадим роль "grantor". Переходим в "Create Role", задаем имя роли в поле "Role Name" (пароль генерируется автоматически) и нажимаем на "Save".

Выдадим права роли. Переходим в "Schemas", нажимаем на "Connection" и выбираем базу, с которой продолжим работу. Выбрав базу, в списке появятся схемы выбранной базы (слева). Нажав на схему, обновится список правил (ролей и прав), которые применяются к схеме (справа). Нажимаем на "New Rule". В появившемся диалоговом окне задаются права на выбранную роль. Выбираем роль "grantor" и право "Usage" в качестве предоставляемого роли. В этом же окне выдаем права на чтение всех таблиц в схеме нажатием на "Grant SELECT to all tables". Через "Save" применяем правила и закрываем диалоговое окно. 

В результате новое правило отобразится в списке.

Итог: роли "grantor" стало доступно чтение из всех таблиц схемы.


Как передать права другим ролям?

Представим себе ситуацию, когда появилась новая роль "grantee", которой нужны те же права, что и у "grantor".

Как быстро их предоставить? Воспользуемся механизмом добавления одной роли в качестве члена (member) другой. Существует два инструмента, которые по-разному представляют членство ролей:

 

В виде графа. Переходим в "Role Groups" и видим граф ролей: роли — вершины графа, членство — его дуги.

Граф ориентированный и не содержит циклов. Направление дуг указывает, какая роль (начало) какой (конец) передает права (предоставляет членство). Выберем роли "grantor" и "grantee" через Ctrl + Click. В зависимости от типа и количества выделенных объектов меняются доступные опции в меню (справа). Для двух объектов появится пункт "Connect Members", по умолчанию он не активен. Переместим "grantor" в секцию "Groups" через Drag&Drop. Нажимаем (на уже активный) "Connect Members".

В результате появится дуга, идущая от "grantor" к "grantee".

Итог: роль "grantee" наследует права "grantor".

 

Далее — альтернативный вариант.

 

В виде таблицы. Переходим в "Role Memberes" и видим таблицу. В таблице для каждой роли сопоставляется список тех ролей, чьи права она наследует в колонке "Belong To Roles" и кому наследует — "Members Of Role".

Нажимаем на редактировать (иконка карандаша), открывается диалоговое окно. В нем уже выбрана роль, связи которой редактируем. Переходим во вкладку "Childs" и добавляем новый пункт (иконка плюса). В список "Childs Of Role" добавится пустая строка, нажав на которую можно выбрать роль. Добавим роль "grantee" и нажмем на "Save".

В результате в колонке "Members Of Role" для "grantor" добавится роль "grantee". Для "grantee" роль "grantor" появится в колонке "BelongTo Roles".

Итог: роль "grantee" наследует права "grantor".


Как посмотреть итоговые права?

Когда пользователей много (на данный момент в GreenPlum их более 200), появляется сложность с определением того, какими правами обладает пользователь к конкретной базе, схеме, таблице. Для этих целей в GPPM существует инструмент, который собирает итоговые права для каждой роли на выбранную сущность БД.

Просмотр итоговых прав. Переходим в "Results" и видим таблицу (слева) с боковым меню (справа), которое содержит пункты: "Database", "Schema", "Table". В зависимости от уровня, до которого вы хотите посмотреть права, будут зависеть, какие колонки отобразятся в таблице. Зададим все три пункта для просмотра того, какие права предоставлены ролям на таблицу.

В результате в колонке "Grantee" увидим роли "grantor" и "grantee" с проставленной "галкой" в колонке "Select".

Роль "grantee" будет серой, т. к. получила права через другую роль (через "grantor").

Итог: для таблицы получили список ролей и прав, которыми они (роли) обладают.

 

В данной статье освещена только базовая часть доступного функционала. Но уже она позволяет повысить скорость и удобство работы с правами пользователей в GreenPlum и PosgreSQL :)

Статью написал инженер данных направления Управление данными Остап :)


Наши предыдущие статьи:

 

Направление Управление данными

Что изучить начинающему аналитику данных

 

Больше интересных статей о работе сотрудников DNS Технологии ты найдёшь на нашем канале, подписывайся!



Report Page