WEB-интерфейс управления правами пользователей в GreenPlum и PostgreSQL

Overview

GreenPlum Permission Manager

WEB-интерфейс управления правами пользователей в GreenPlum и PostgreSQL.

Preview

Резюме

Функции

Доступные возможности зависят от СУБД. В виду того, что в PostgreSQL отсутствуют ресурсные группы, связанный с ними функционал работать не будет.

Реализовано для GreenPlum:

  • Управление ролями (создание, изменение, удаление)
  • Управление группами ролей (добавление, исключение)
  • Представление ролей и связей между ними в виде графа и таблицы
  • Выдача прав роли (на чтение, редактирования и т. д.): БД, схемы и конкретной таблицы
  • Просмотр итоговых прав роли на объект: БД, схему, таблицу
  • Просмотр дефолтных прав роли для выбранной базы
  • Управление ресурсными группами (создание, изменение, удаление)
  • Управление членами ресурсной группы (добавление, исключение)
  • Аутентификация пользователя в GUI по email и паролю (поддерживается LDAP)
  • Поддержка переключения между несколькими СУБД
  • Разграничение прав редактирования СУБД через GUI (до уровня роли, базы, схемы)

Совместимость

Минимально GreenPlum 6.8 и PostgreSQL 9.6. Будет работать и на более новых версиях.

Быстрый старт

Для предварительного ознакомления, достаточно воспользоваться подготовленным автономным образом:

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. Данные для входа:

login: [email protected]
password: admin

Для развертывания на production, рекомендуется собрать backend и frontend образы самостоятельно.

Установка

Клонируйте репозиторий проекта:

git clone https://github.com/dns-technologies/gppm

Настройка

Параметры задаются при помощи переменных окружения, возможные параметры указаны в файле .env.example корня проекта. Для тестового запуска, необходимо переименовать .env.example в .env. Некоторые аргументы должны быть доступны на момент сборки, сперва необходимо настроить их, прежде чем приступать к сборке образов.

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

В поле Тип, содержится то, каким образом параметр должен быть передан в Docker: ENV — как переменная окружения контейнера, ARG — как аргумент сборки образа.

Параметр Тип Описание
SECRET_KEY ENV Используется механизмом аутентификации. При изменении секрета, пользователями придется повторно пройти аутентификацию в браузере.
ENCODING_KEY ENV Ключ шифрования паролей доступа к СУБД. При изменении секрета, потребуется повторное проставление паролей для всех контекстов.
BACKEND_CORS_ORIGINS ENV Список доменов, с которых возможно обращение к API. Для обращения через WEB-интерфейс, его URL следует добавить в этот список.
FIRST_SUPERUSER ENV Email первого пользователя с правами администратора.
FIRST_SUPERUSER_PASSWORD ENV Пароль FIRST_SUPERUSER.
POSTGRES_SERVER ENV Расположение PostgreSQL для нужд backend. Рекомендуется версия СУБД не ниже 9.6.
POSTGRES_PORT ENV Порт PostgreSQL. Обычно это 5432.
POSTGRES_USER ENV Роль для подключения к POSTGRES_SERVER.
POSTGRES_PASSWORD ENV Пароль POSTGRES_USER для подключения к POSTGRES_SERVER.
POSTGRES_DB ENV База на POSTGRES_SERVER, в которой должны быть права на выполнение DDL и DML команд от роли POSTGRES_USER.
LOGGING_DEBUG ENV Флаг логирования сообщений об ошибках. Сообщения содержат текст ошибки и HTTP-код ответа.
INSTALL_DBLINK ENV Установка dblink при его отсутствии. Позволяет использовать более сложный алгоритм удаления ролей.
GRANT_WITH_ADMIN_OPTION ENV Объединение ролей с WITH ADMIN OPTION. Роль сможет добавлять членов в группу, которой принадлежит.
DEEP_REVOKE ENV Выполнять REVOKE от всех ролей, которые выдали права.
AUTH_PROVIDER ENV Тип аутентификации: local или ldap. При выборе ldap, применятся настройки с префиксом LDAP_.
AUTH_OPEN_REGISTRATION ENV Проверка пароля при первой аутентификации. Позволяет проще регистрировать новых пользователей.
AUTH_REFRESH_PASSWORD ENV Перезаписывать пароль при каждой аутентификации. Рекомендуется включить для ldap.
LDAP_HOST ENV Расположение LDAP сервера.
LDAP_USER_SEARCH_BASE ENV Базовый DN, используемый для поиска пользователей.
LDAP_USER_SEARCH_FILTER ENV Выражение фильтра, используемое для поиска пользователей. Используйте {email} там, где ожидается совпадение с почтой пользователя.
LDAP_USER_ATTRS ENV Список атрибутов, которые будут использованы в качестве имени пользователя.
FRONTEND_DOMAIN ARG Базовая часть URL API, к которой будут посылаться запросы из GUI. Задается при сборке fronted-образа.

Запуск

Достаточно собрать контейнеры командой docker-compose build из корня проекта. На этом шаге будут скачаны базовые образы, выполнены команды установки зависимостей для backend и frontend и прочие команды из backend/backend.dockerfile и frontend/fontend.dockerfile. После успешной сборки, выполнить docker-compose up. Запущенный сервис доступен на http://localhost.

Деплой в K8s

Деплой в K8s кластер осуществляется с помощью Helm-чартов из директории charts/gppm. Настройка производится редактированием файла charts/gppm/values.yaml. Предварительно, требуется собрать образы и опубликовать их в Container Registry. В качестве HTTP-сервера на backend по умолчанию используется Gunicorn. В среде разработки по умолчанию запускается Uvicorn.

Команды сборки контейнеров:

cd backend
docker build \
    -t gppm-backend \
    -f backend.dockerfile \
    --no-cache .
cd frontend
docker build \
    -t gppm-frontend \
    -f frontend.dockerfile \
    --build-arg FRONTEND_DOMAIN=gppm.com \
    --no-cache .

Разработка

Проект состоит из backend и frontend частей. Backend — RestFull API на FastAPI с использованием ORM SQLAlchemy и СУБД PostgreSQL для хранения параметров аутентификации/авторизации доступа к WEB-интерфейсу. Frontend — SPA приложение на стеке Vue.js + Vuex + Vuetify с использованием JavaScript и TypeScript библиотек.

Для разработки, сервисы нужно запускать отдельно. Миграция БД производится библиотекой Alembic автоматически при старте. Для frontend разработки, требуется установленный Node.js версии не ниже v14.x (рекомендуется v16.x). Для backend разработки, требуется установленный Docker Compose.

Backend с Live Reloading

При изменении кода backend, сервер перезапустится автоматически:

docker-compose up --build

Frontend с Hot Reloading

При изменении кода frontend, изменения применятся автоматически:

cd frontend
npm install
npm run serve

Доступ к Dev окружению

По умолчанию, после выполнения описанных выше команд:

Генерация Alembic миграций

Для генерации миграций из контейнера, выполнить:

docker-compose run backend bash
alembic revision --autogenerate -m "Migration title"

Тестирование

Вместе с приложением, можно поднимать контейнеры с GreenPlum 6.8 и PostgreSQL 9.6. Логины и пароли тестового окружения находятся в docker-compose.stage.yml. Команда запуска:

docker-compose \
    -f docker-compose.yml \
    -f docker-compose.stage.yml \
    up --build

Лицензия

The MIT License (MIT)

Copyright (c) 2022 ООО "ДНС Технологии"

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
You might also like...
Linux System Optimizer and Monitoring - https://oguzhaninan.github.io/Stacer-Web
Linux System Optimizer and Monitoring - https://oguzhaninan.github.io/Stacer-Web

Linux System Optimizer and Monitoring Sponsors Reviews Required Packages curl, systemd PPA Repository (for ubuntu) sudo add-apt-repository ppa:oguzhan

Open source Web File Manager (Javascript + VueJS 2)
Open source Web File Manager (Javascript + VueJS 2)

Media Manager Media Manager is an open source web file manager and can be a nice alternative to Wordpress Media Manager, CKFinder, KCFinder, elFinder.

A framework written in Vue.js for creating command-line like interfaces in web browsers.
A framework written in Vue.js for creating command-line like interfaces in web browsers.

promptie A framework for creating command-line like interfaces in web browsers Promptie gives you useful and convenient API's to simulate a CLI like i

A web based RSS Aggregator
A web based RSS Aggregator

News-Weaver A simple web based RSS Aggregator A work in progress Inspired by: https://github.com/GetStream/Winds NOTE: Due to restrictions imposed by

A lightweight pattern library designed to be included with any web project.
A lightweight pattern library designed to be included with any web project.

Astrum Astrum is nolonger actively maintained. We're fans of Storybook which you should check out as an alternative. Astrum is a lightweight pattern l

Vue2 + Google Cloud Vision + Progressive Web App With Face Detection
Vue2 + Google Cloud Vision + Progressive Web App With Face Detection

The-feeling Vue2 + Vuetify + google cloud vision api with Progressive Web App Example Getting Started Enable google cloud vision api At - src/compone

Vue2 + Amazon Rekognition + Amazon S3 + Progressive Web App With Face Detection
Vue2 + Amazon Rekognition + Amazon S3 + Progressive Web App With Face Detection

The-feeling 2 Vue2 + Vuetify + Amazon Rekognition + Amazon S3 with Progressive Web App Example Getting Started At - src/components/Face.vue AWS conso

A Vue2 Performs synchronous speech recognition Speech to text Google Cloud Speech With Progressive Web App
A Vue2 Performs synchronous speech recognition Speech to text Google Cloud Speech With Progressive Web App

vue-speech A Vue2 Performs synchronous speech recognition with Google Cloud Speech on Progressive Web App Config Step 1 Enable the Cloud Speech API fo

A Vue.js web application for Freedomotic Open IoT framework
A Vue.js web application for Freedomotic Open IoT framework

fd-vue-webapp A Vue.js client for Freedomotic framework. Scope of the project This repository contains the implementation of a front end client for Fr

Releases(v1.0.0)
  • v1.0.0(Sep 19, 2022)

    Description

    First public release. Additionally added prototype Helm Chart.

    Feautures

    • Role management (create, modify, delete)
    • Role group management (add, remove)
    • Representation of roles and relationships between them in the form of a graph and a table
    • Issuance of role rights for entities: database, schema and specific table
    • Viewing the total rights of the role on the object: database, schema, table
    • View default role rights for the selected database
    • Resource group management (create, modify, delete)
    • Resource group member management (adding, dropping)
    • GUI user authentication by email and password (LDAP supported)
    • Support for switching between multiple DBMS
    • Differentiation of rights for editing the DBMS through the GUI (up to the level of role, database, schema)
    Source code(tar.gz)
    Source code(zip)
Owner
ООО "ДНС Технологии"
ООО
A simple color game made using VueJS + Ionic on front-end, and AdonisJS + PostgreSQL on back-end

Simple Color Game This is a browser game made using VueJS + Ionic on front-end, and AdonisJS + PostgreSQL on back-end. The game is very simple: You ha

Thales B. Rodrigues 11 Aug 9, 2022
macOS Web - macOS Desktop experience for Web.

Mac OS Big Sur Web This open source project aims to replicate some of the Mac OS(Big Sur, at the time)'s desktop experience on web, using standard web

Puru Vijay 1.5k Sep 27, 2022
Create easy workflows for web scraping using the web and drag and drop features.

Create easy workflows for web scraping using the web and drag and drop features. Making scraping e

Antonio 3 Sep 22, 2022
This project shows how to dockerize web application build using Vue JS web development framework for Java Script programming language.

vue-docker This project shows how to dockerize web application build using Vue JS web development framework for Java Script programming language. Requ

Denny Imanuel 1 Dec 27, 2021
Gflbans-web - Vue.JS 3 Web Front End for GFLBans

GFLBans Web The Web Frontend for GFLBans. This project, although public, is likely not useful to most as the Python API server component (which coordi

Aurora 2 Sep 7, 2022
A vue3 + Element-plus written web IM web side 💻 📲. 🖥

A vue3 + Element-plus written web IM web side ?? ??. ??

IM-Tools 73 Sep 21, 2022
The Coach Finder App is an Web App which should help us find a coach that, for example, helps us become better in web development, whatever.

The Coach Finder App is an Web App which should help us find a coach that, for example, helps us become better in web development, whatever.

Asmaa Adel 2 Aug 27, 2022
A free service which provides simple access to thousands of video lessons on web developing and programming

Web Learn Web Learn is an open source service which provides simple access to thousands of video lessons on web developing and programming. Developmen

Aleksandr Statciuk 183 Sep 13, 2022
News for Web Designers and Developers - Shows aggregated news from multiple sources

Update - This has now moved to a standalone site https://dailydevbytes.com/ with bit more features. You can still find the core logic in this code whi

Super Dev Resources 61 Mar 27, 2022
An offline-first SPA using Vue.js, the WordPress REST API and Progressive Web Apps

vue-wordpress-pwa An offline-first SPA using Vue.js, the WordPress REST API and Progressive Web Apps Live version: https://www.fullstackweekly.com/ De

Bill Stavroulakis 688 Oct 6, 2022