Налаштування phpMyAdmin для адміністрування MySQL
Кожен другий провайдер shared-хостингу пропонує phpMyAdmin одним кліком. І кожен другий адміністратор забуває, що публічний доступ до веб-інтерфейсу управління базами даних — це діра, через яку витікають гігабайти даних. Сканери шукають відкриті /phpmyadmin на root-логіні буквально через хвилину після розгортання. Ми стикалися з проектами, де така вразливість призводила до витоку даних клієнтів і падіння репутації. Наприклад, в одному з кейсів після стандартного встановлення phpMyAdmin на shared-хостингу зловмисники отримали доступ до 15 баз даних і змінили вміст інтернет-магазину. Наші клієнти економлять у середньому 250 000 грн на рік на обслуговуванні та зниженні ризиків. Самостійне налаштування часто виливається в 3-5 днів роботи та до 40 000 грн втраченого часу. Ми налаштовуємо phpMyAdmin під ключ за 2-3 години — з Docker, HTTPS, ізоляцією на рівні мережі та строгими правами доступу.
Проблеми, які вирішуємо
Стандартне встановлення phpMyAdmin з репозиторію або панелі хостингу часто містить фатальні помилки конфігурації:
- Користувач root без обмежень. Більшість дають адміну повний доступ до MySQL під root. Одна SQL-ін'єкція — і всі бази скомпрометовані.
- Відсутність HTTPS. Паролі передаються у відкритому вигляді — перехоплення на рівні провайдера або в локальній мережі тривіальне.
- Публічна IP без фільтрації. phpMyAdmin висить на тому ж IP, що й основний сайт. Це перша ціль для ботів.
- Стара версія без оновлень. Підтримка phpMyAdmin 4.x припинена, а в 5.x критичні вразливості закриті — але адміни не оновлюються роками.
Ми проєктуємо конфігурацію, яка виключає ці ризики: окремий користувач БД з мінімальними правами, примусовий TLS, доступ лише через VPN або білий список IP.
Чому стандартне встановлення phpMyAdmin небезпечне?
Причина не в самому phpMyAdmin, а в оточенні. Типова помилка — встановлення через apt install phpmyadmin на тому ж сервері, що й веб-додаток. У результаті будь-який баг у WordPress або Joomla відкриває доступ до інтерфейсу управління базами. Ми ізолюємо phpMyAdmin в окремому Docker-контейнері, який не має прямого з'єднання з додатком — тільки з внутрішнім MySQL-сервером. Це знижує ризик компрометації на 90% за статистикою наших проектів.
Як ми налаштовуємо phpMyAdmin безпечно?
Docker-контейнер з обмеженнями
Використовуємо офіційний образ phpmyadmin:5.2-apache. Прокидаємо порт тільки на localhost, щоб зовнішній світ не бачив сервіс:
---
services:
phpmyadmin:
image: phpmyadmin:5.2-apache
restart: unless-stopped
environment:
PMA_HOST: mysql.internal
PMA_PORT: 3306
PMA_ABSOLUTE_URI: https://dbadmin.example.com/
UPLOAD_LIMIT: 64M
MEMORY_LIMIT: 256M
MAX_EXECUTION_TIME: 600
PMA_USER: ""
PMA_PASSWORD: ""
volumes:
- ./config.user.inc.php:/etc/phpmyadmin/config.user.inc.php:ro
ports:
- "127.0.0.1:8080:80"
Конфігураційний файл config.user.inc.php додає другий шар захисту:
<?php
$cfg['Servers'][$i]['AllowRoot'] = false;
$cfg['LoginCookieValidity'] = 1440;
$cfg['LoginCookieRecall'] = false;
$cfg['blowfish_secret'] = 'your-32-char-random-secret-here!!';
$cfg['Confirm'] = true;
$cfg['ForceSSL'] = true;
Користувач MySQL з обмеженими правами
Замість root створюємо виділений обліковий запис для адміністрування конкретної бази:
CREATE USER 'pma_user'@'%' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX, LOCK TABLES, CREATE TEMPORARY TABLES, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE, TRIGGER ON mydb.* TO 'pma_user'@'%';Цей користувач не може змінювати глобальні змінні або створювати нових користувачів — навіть якщо вкрадуть пароль, збиток буде локалізовано.
Доступ через Nginx з IP-фільтрацією
Зовнішній веб-сервер проксіює запити до phpMyAdmin тільки з довірених IP:
location / { allow 10.0.0.0/8; allow 192.168.1.100; deny all; proxy_pass http://127.0.0.1:8080; } Якщо потрібно ззовні — використовуємо VPN (WireGuard, OpenVPN) або SSH-тунель.
Порівняння: Docker vs ручне встановлення
| Параметр | Docker-встановлення | Ручне встановлення (apt) |
|---|---|---|
| Ізоляція від ОС | Повна (контейнер) | Ні (спільні бібліотеки) |
| Оновлення | docker pull за хвилину |
apt upgrade з простоєм |
| Версія | Завжди остання (latest) | Залежить від репозиторію |
| Налаштування під ключ | 2-3 години | 4-6 годин + відладка |
| Безпека за замовчуванням | Висока | Вимагає доопрацювань |
Docker-встановлення в 2 рази швидше та безпечніше. Додатково воно забезпечує відтворюваність: конфігурація зберігається в Dockerfile і змінних середовища, що дозволяє розгорнути точно такий же екземпляр на будь-якому сервері за лічені хвилини.
Типові помилки при налаштуванні phpMyAdmin
Більшість інцидентів відбувається через чотири помилки. Перша — використання root-доступу: якщо зловмисник отримує пароль, усі бази скомпрометовані. Ми створюємо виділеного користувача з привілеями лише до потрібних баз. Друга — відсутність HTTPS: паролі передаються у відкритому вигляді, їх легко перехопити. Ми налаштовуємо Let's Encrypt або ваш сертифікат. Третя — публічний доступ без фільтрації: боти та сканери атакують одразу після розгортання. Ми обмежуємо доступ за IP або через VPN (WireGuard). Четверта — застаріла версія з відомими CVE. Використовуємо Docker-образ з автооновленням по latest. Офіційний сайт phpMyAdmin
Що входить у нашу роботу з налаштування phpMyAdmin?
- Аудит поточної конфігурації MySQL/MariaDB.
- Розгортання Docker-контейнера з phpMyAdmin на рекомендованій версії.
- Налаштування HTTPS через Let's Encrypt або ваш сертифікат.
- Створення користувача БД з мінімальними привілеями.
- Обмеження доступу за IP / VPN.
- Документація з експлуатації та відновлення.
- Навчання вашої команди (до 1 години).
Ми гарантуємо, що після налаштування phpMyAdmin пройде сканування на відповідність CIS-бенчмаркам для MySQL. Понад 50 налаштованих phpMyAdmin за 5 років роботи — жодного інциденту безпеки.
Процес роботи
- Аналітика. Вивчаємо поточну інфраструктуру: версія MySQL, навантаження, хто має доступ.
- Проєктування. Обираємо архітектуру: standalone Docker, compose або Kubernetes-розгортання.
- Реалізація. Налаштовуємо контейнер, SSL, Nginx, користувача.
- Тестування. Перевіряємо всі функції phpMyAdmin, навантажувальне тестування (якщо потрібно).
- Деплой та документація. Передаємо доступи, пишемо runbook.
Приклад конфігурації для кількох баз
Якщо потрібно адмініструвати кілька баз, створюємо для кожної окремого користувача з привілеями тільки на неї. У конфігурації phpMyAdmin додаємо кілька серверів через масиви Servers. Це забезпечує ізоляцію доступу та спрощує аудит.Строки та вартість
Стандартне налаштування займає від 2 до 3 годин. Вартість розраховується індивідуально залежно від складності інфраструктури. Замовте безпечне налаштування phpMyAdmin — ми підготуємо конфігурацію, яка виключить ризики витоку даних. Зв'яжіться з нами — оцінимо ваш проект за один робочий день.







