Під час налаштування Retool для внутрішніх інструментів часто виникають проблеми: неправильні права доступу, небезпечні підключення, N+1 запити, які вбивають продуктивність. Типовий кейс — розробник дає базі суперкористувача, а потім дивується, чому дані витекли. Або підключає MongoDB без SSL, і трафік іде відкрито. Нещодавно клієнт втратив 2 дні на розгортання адмінки через некоректні права — ми вирішили проблему за 3 години. Ми налаштовуємо підключення до баз даних (PostgreSQL, MySQL, MongoDB) з нуля: від створення окремого користувача до налаштування SSH-тунелю. Нижче — типові конфіги, best practices та реальні граблі, яких ми уникаємо.
Проблеми, які вирішуємо
N+1 запити — одна з головних причин гальмування. Retool без кешування може виконувати десятки запитів на відмальовування віджета. Наприклад, список клієнтів із їхніми замовленнями: без джойнів отримуємо 1 запит на клієнта + N на замовлення. Це збільшує час завантаження на 500%. Рішення — використовувати параметризовані запити з LEFT JOIN всередині одного виклику.
Небезпечні підключення — база з публічним IP, пароль суперкористувача в плейнтексті, відсутність SSL. В одному проєкті ми виявили, що до MongoDB можна було підключитися без пароля з будь-якої точки світу. Довелося терміново змінювати налаштування.
Права доступу — часто дають надто широкі ролі. Через це випадкове видалення даних або SQL-ін'єкції. Ми завжди створюємо користувача з мінімальними привілеями.
Що таке N+1 запити і як їх уникнути?
N+1 виникає, коли для кожного батьківського об'єкта виконується окремий дочірній запит. У Retool це особливо помітно на таблицях із лукапом. Оптимальний підхід — один SQL-запит з JOIN, агрегацією або з використанням виразів IN (). Наприклад, замість:
SELECT * FROM customers; -- 1 запит
-- для кожного customer виконується:
SELECT * FROM orders WHERE customer_id = $1;
Використовуйте:
SELECT c.*, o.order_count
FROM customers c
LEFT JOIN (
SELECT customer_id, COUNT(*) as order_count
FROM orders
GROUP BY customer_id
) o ON c.id = o.customer_id;
Типова затримка через N+1 — 2-3 секунди на сторінку. Після оптимізації запит виконується за 50 мс.
Підключення PostgreSQL, MySQL та MongoDB
Retool підтримує популярні БД. Розглянемо підключення кожної. Важливо: всі з'єднання мають бути зашифровані, а користувачі — з обмеженими правами.
PostgreSQL
Створіть ресурс у Retool: Resources → Create New → PostgreSQL. Вкажіть:
Host: db.production.example.com
Port: 5432
Database name: app_production
Database username: retool_readonly
Password: ****
SSL mode: require
Приклад SQL для створення користувача з правами лише на читання:
Створення readonly-користувача
CREATE USER retool_readonly WITH PASSWORD 'secure_password';
GRANT CONNECT ON DATABASE app_production TO retool_readonly;
GRANT USAGE ON SCHEMA public TO retool_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO retool_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO retool_readonly;
MySQL
Для MySQL також використовуйте окремого readonly-користувача. Обов'язково увімкніть SSL: Required та вкажіть charset utf8mb4. Порт за замовчуванням 3306.
MongoDB
Рядок підключення: mongodb://user:pass@host:27017/db?ssl=true. У production використовуйте replica set з retryWrites=true. Порт за замовчуванням 27017.
| Параметр | PostgreSQL | MySQL | MongoDB |
|---|---|---|---|
| Порт за замовчуванням | 5432 | 3306 | 27017 |
| SSL mode | require | Required | ssl=true |
| Користувач | окремий readonly | окремий readonly | окрема роль |
Як налаштувати SSH-тунель?
Якщо база даних не має публічного IP, використовуйте SSH-тунель. Retool підтримує його налаштування за пару хвилин.
- На bastion-сервері створіть користувача
retool-tunnelз обмеженими командами. - У Retool при створенні ресурсу увімкніть SSH tunnel та вкажіть:
- SSH host: bastion.example.com
- SSH port: 22
- SSH username: retool-tunnel
- SSH private key: [вставити ключ]
- На bastion-сервері обмежте команди:
Match User retool-tunnel
ForceCommand /bin/false
PermitTunnel yes
AllowTcpForwarding yes
Параметризовані запити проти SQL-ін'єкцій
Retool автоматично екранує змінні в {{ }}. Використовуйте їх завжди. Приклад безпечного оновлення:
UPDATE users
SET status = {{ statusSelect.value }},
updated_at = NOW(),
updated_by = {{ current_user.email }}
WHERE id = {{ usersTable.selectedRow.data.id }}
AND status != {{ statusSelect.value }}
Ніколи не конкатенуйте рядки вручну — це прямий шлях до ін'єкцій. Згідно з Retool Documentation, параметризовані запити — єдиний безпечний спосіб.
Права доступу для Retool
Краще створити окремого користувача лише для читання. Якщо потрібен запис — дайте права тільки на конкретні таблиці. Приклад для PostgreSQL:
GRANT SELECT, UPDATE ON users TO retool_ops;
GRANT SELECT, INSERT, UPDATE ON orders TO retool_ops;
| Дія | Роль | Таблиці |
|---|---|---|
| Тільки читання | retool_readonly | Всі таблиці в схемі |
| Читання та запис | retool_ops | Тільки users, orders |
Налаштування під ключ: що входить
Ми надаємо повний цикл робіт:
- Аналіз архітектури та вибір оптимального стеку
- Створення користувачів БД з мінімальними правами
- Налаштування SSH-тунелю та SSL
- Конфігурація ресурсів у Retool
- Написання перших 5–10 запитів та віджетів
- Документація щодо підключення та безпеки
- Навчання команди (1 година)
| Етап | Час |
|---|---|
| Аналіз та проєктування | 2–3 години |
| Налаштування інфраструктури | 1–2 години |
| Конфігурація Retool | 1 година |
| Тестування та документування | 2 години |
Термін — від 1 дня. Вартість розраховується індивідуально залежно від складності.
Типові помилки при налаштуванні
- Неправильний хост: використовуйте приватний IP, якщо Retool і база в одній мережі.
- Пропущений firewall: перевірте, що IP Retool дозволений у security group.
- Невірний порт: уточніть порт у адміністратора БД.
- Відсутність SSL: завжди вмикайте SSL mode require або ssl=true.
Чому варто довірити налаштування нам?
У нас 5+ років досвіду роботи з Retool та базами даних. Ми гарантуємо безпеку та продуктивність. Налаштували понад 50 проєктів. Retool у 5 разів швидший за самописні адмінки — ви економите до 40% часу на розробку. Замовте налаштування Retool під ключ та зекономте час своєї команди. Отримайте консультацію — ми оцінимо ваш проєкт.







