Databases

phpMyAdmin

phpMyAdmin — веб-интерфейс на PHP для управления MySQL и MariaDB: таблицы, запросы, пользователи и дампы прямо из браузера.

Что такое phpMyAdmin

phpMyAdmin — свободный веб-интерфейс для администрирования MySQL и MariaDB, написанный на PHP. Ставится на веб-сервер, открывается в браузере и позволяет делать всё то же, что консольный клиент mysql, только мышкой: смотреть и править таблицы, выполнять SQL-запросы, заводить пользователей, снимать и заливать дампы.

Проект существует с 1998 года и стал стандартом де-факто на shared-хостинге: у большинства российских и зарубежных провайдеров это единственный доступный способ добраться до базы, потому что SSH там не дают. Распространяется под GPL.

Что умеет

  • Структура — создание и изменение таблиц, колонок, индексов, внешних ключей без единой строки DDL.
  • Данные — просмотр, фильтрация, правка строк в табличном виде.
  • SQL-консоль — произвольные запросы с подсветкой и историей.
  • Импорт-экспорт — дампы в SQL, CSV, JSON и обратно.
  • Пользователи и праваGRANT через интерфейс.
  • ДиагностикаEXPLAIN запроса, статус сервера, список процессов, переменные.
  • Designer — визуальная схема связей между таблицами.

Установка

sudo apt install phpmyadmin
# либо вручную рядом с сайтом

Через Docker — быстрее и чище, особенно для локальной разработки:

# docker-compose.yml
services:
  db:
    image: mariadb:11
    environment:
      MARIADB_ROOT_PASSWORD: secret
    volumes:
      - dbdata:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin:latest
    environment:
      PMA_HOST: db
    ports:
      - "127.0.0.1:8080:80"   # только localhost, не наружу
    depends_on:
      - db

volumes:
  dbdata:

Обратите внимание на 127.0.0.1:8080:80: порт публикуется только на локальный интерфейс. Запись 8080:80 открыла бы панель управления базой всему интернету.

Безопасность — главное про phpMyAdmin

phpMyAdmin — одна из самых сканируемых целей в вебе. Боты перебирают /phpmyadmin, /pma, /myadmin на каждом IP-адресе круглосуточно, а найденная панель с паролем root:root означает полный доступ к вашим данным. Многие взломы сайтов на массовом хостинге начинались именно здесь.

Минимум, который нужно сделать:

  • Не держать на публичном URL. Либо доступ через SSH-туннель (ssh -L 8080:localhost:8080 user@server), либо через VPN, либо по списку IP.
  • Сменить адрес с /phpmyadmin на неочевидный — это не защита, но отсекает поток тупых ботов.
  • Добавить второй слой аутентификацииHTTP Basic на уровне Nginx поверх штатного входа.
  • Только TLS. По HTTP пароль от базы уходит открытым текстом.
  • Не заходить под root. Отдельный пользователь с правами только на нужную базу.
  • Обновлять. В phpMyAdmin регулярно находят уязвимости, и старая версия — известная проблема.
location /db-panel/ {
    allow 203.0.113.10;      # офисный IP
    deny all;

    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;

    proxy_pass http://127.0.0.1:8080/;
}

Ограничения

  • Импорт больших дампов не работает. Загрузка упирается в upload_max_filesize, post_max_size и max_execution_time PHP. Дамп на несколько гигабайт через браузер залить нереально — нужен mysql < dump.sql в консоли.
  • Тяжёлые запросы отваливаются по таймауту веб-сервера, а не завершаются.
  • Только MySQL и MariaDB. Для PostgreSQL есть phpPgAdmin и pgAdmin.

Альтернативы

Инструмент Формат Особенность
Adminer Один PHP-файл Легче phpMyAdmin, поддерживает PostgreSQL, SQLite и другие
pgAdmin Веб Стандарт для PostgreSQL
DBeaver Десктоп Универсальный клиент под все СУБД
MySQL Workbench Десктоп Официальный клиент Oracle, ER-диаграммы
mysql CLI Всегда доступен, без лимитов PHP

Adminer заслуживает отдельного упоминания: это буквально один PHP-файл, который кладут на сервер, пользуются и удаляют — меньше кода, меньше поверхность атаки.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер