
kviklet v0.8.0
Процесс рецензирования/утверждения запросов к базе данных по аналогии с Pull Request. Для соответствующего требованиям, но при этом беспрепятственного доступа инженеров к продакшену.
Kviklet
Kviklet.dev | Release Notes | Discord
Безопасный доступ к production-средам без ущерба для продуктивности разработчиков.

Kviklet (произносится «Квиклет») применяет принцип четырёх глаз к доступу к production-базам данных, с рабочим процессом проверки и утверждения, похожим на pull request, для отдельных SQL-запросов или сессий доступа к базе данных с ограничением по времени. Инженеры могут проверять и утверждать запросы друг друга, не направляя каждый запрос через DBA или команду эксплуатации.
Kviklet разворачивается самостоятельно и работает как Docker-контейнер с базой данных PostgreSQL для хранения состояния приложения. Его веб-интерфейс позволяет отправлять, проверять и выполнять запросы. Опциональная корпоративная лицензия открывает аутентификацию SAML, требования к проверке на основе ролей, синхронизацию ролей и API-ключи. Запросить корпоративную лицензию можно на kviklet.dev.
Поддерживаемые базы данных: Postgres, MySQL, MariaDB, MS SQL Server и MongoDB.
Модель доступа
Мы рекомендуем подключить Kviklet к вашему существующему провайдеру идентификации. Kviklet поддерживает SSO через OIDC (Google, Keycloak и т. д.) или SAML (только для корпоративной версии), а также аутентификацию LDAP (Active Directory и т. д.).
Затем пользователи создают запросы для подключений, которые сопоставлены с конкретным пользователем базы данных. Эти запросы бывают двух типов:
- Одиночный запрос: конкретный SQL-запрос, отправленный на проверку.
- Временный доступ: сессия с ограничением по времени, в рамках которой можно выполнить несколько запросов.
В зависимости от конфигурации запросы проверяются и утверждаются другими пользователями, прежде чем Kviklet разрешит выполнение.
Kviklet подключается к базе данных от имени пользователя. Пароль подключения к базе данных никогда не показывается пользователю.
Администратор может настроить, какая роль имеет доступ к какому подключению и какие этапы проверки требуются для выполнения. Доступ на уровне базы данных управляется через механизмы RBAC самой базы данных. Например, можно создать роль только для чтения для подключения только для чтения и назначить для него меньше требований к проверке, чем для подключения с записью.
Kviklet записывает выполненные запросы и связывает их с пользователем и запросом на доступ. Для полного охвата ручного доступа к базе данных ограничьте прямые подключения и направьте любой ручной доступ через Kviklet. Инженерам не нужно получать или передавать учётные данные базовой базы данных.
Дополнительные корпоративные функции включают:
- SAML: Поддержка аутентификации SAML.
- Прокси (Postgres, MariaDB, MySQL): Используйте предпочитаемый клиент базы данных через утверждённую сессию временного доступа с временным паролем. Выполненные запросы записываются в журнал аудита Kviklet.
- Этапы проверки на основе ролей: Требовать утверждения от определённых ролей перед выполнением.
- Синхронизация ролей: Автоматическая синхронизация ролей пользователей из групп вашего провайдера идентификации.
- API-ключи: Программный доступ к API Kviklet.
Больше скриншотов
Запросы
Все запросы на доступ к данным находятся в одном месте. Как открытые PR для ваших production-баз данных:

Живые сессии
Утверждённый запрос на временный доступ открывает живую SQL-сессию прямо в браузере:

Журнал аудита
Каждый выполненный запрос записывается — независимо от того, был ли он выполнен как проверенный одиночный запрос, в живой сессии или через прокси базы данных:

Функции по типу базы данных/подключения
Большинство функций доступны для всех баз данных (SSO, LDAP, RBAC, процесс проверки/утверждения, журнал аудита и т. д.). Но некоторые функции ограничены — либо потому, что они ещё просто не реализованы, либо потому, что они не имеют смысла для конкретного назначения. Следующая таблица показывает, какие функции доступны для какого типа базы данных:
| База данных | Проверка запросов | Временный доступ | Прокси (Beta) | План выполнения |
|---|---|---|---|---|
| Postgres | ✓ | ✓ | ✓ | ✓ |
| MySQL | ✓ | ✓ | ✓ | ✓ |
| MariaDB | ✓ | ✓ | ✓ | ✓ |
| SQL Server | ✓ | ✓ | ✗ | ✓ |
| MongoDB | ✓ | ✓ | ✗ | ✗ |
| Kubernetes | ✓ | ✗ | ✗ | ✗ |
Установка
Kviklet поставляется как простой docker-контейнер.
Доступные версии можно найти в разделе Releases. Мы рекомендуем регулярно обновлять используемую версию, так как мы продолжаем добавлять новые функции.
Последняя на данный момент — ghcr.io/kviklet/kviklet:0.8.0, также можно использовать :main, но иногда может случиться, что мы случайно смёржим что-то с багами. Хотя мы стараемся этого избегать.
Быстрый старт
Если вы просто хотите попробовать, как это работает:
-
Вот минимальный docker-compose.yaml:
Нажмите, чтобы развернуть содержимое compose
``` services: postgres: image: postgres:16 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres ports: - "5432:5432" volumes: - ./postgres-data:/var/lib/postgresql/data # - ./sample_data.sql:/docker-entrypoint-initdb.d/init.sqlkviklet-postgres: image: postgres:16 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: kviklet ports: - "5433:5432" volumes: - ./kviklet-postgres-data:/var/lib/postgresql/data
kviklet: image: ghcr.io/kviklet/kviklet:main ports: - "80:8080" environment: - SPRING_DATASOURCE_URL=jdbc:postgresql://kviklet-postgres:5432/kviklet - SPRING_DATASOURCE_USERNAME=postgres - SPRING_DATASOURCE_PASSWORD=postgres - INITIAL_USER_EMAIL=[email protected] - INITIAL_USER_PASSWORD=admin depends_on: - kviklet-postgres
- Запустите
docker-compose.ymlчерезdocker-compose up -d. Kviklet запустится на порту 80, перейдите наlocalhostи попробуйте. Логин администратора — [email protected] с паролемadmin.