Как подключиться к MySQL удаленно?
После того, как Вы установили сервер MySQL, подключиться к нему Вы можете только с этой же машины. Сделано это в целях безопасности системы, так как в большинстве случаев MySQL используется в Web, а там в редких случаях разносят web-сервер и сервер баз данных.
В корпоративном же сегменте правильнее использовать 1 сервер под все похожие задачи. Глупо держать MySQL с одной базой данных на каждом сервере, где он может потребоваться. Поэтому сервер баз данных должен быть один, на котором заведено нужное количество баз данных под разные задачи.
Разрешаем подключаться к MySQL удаленно
В конфигурационном файле самого MySQL есть параметр bind-address, который отвечает за это, поэтому:
- открываем конфигурационный файл для редактирования:
sudo nano /etc/mysql/my.cnf
- комментируем строку:
# bind-address = 127.0.0.1
- перезапускаем MySQL:
sudo service mysql restart
Закомментировать эту строку равносильно тому, что присвоить IP-адрес 0.0.0.0, то есть разрешить подключаться всем. Указать 2 IP-адреса в этой строчке нельзя. Если нужно ограничить подключение к серверу MySQL, нужно использовать возможности iptables.
Теперь через telnet-клиент Вы можете подключиться к серверу базы данных, но для того, чтобы зайти внутрь нужна учетная запись, которой разрешено подключаться не только с localhost. Для этого нужно подключиться к MySQL с самого сервера и создать такого пользователя:
mysql -u root -p
И командой создаем пользователя:
GRANT ALL PRIVILEGES
ON *.*
TO 'новый_пользователь'@'удаленный_адрес'
IDENTIFIED BY 'пароль'
WITH GRANT OPTION;
Эта строчка создает пользователя с неограниченными правами, что делать не совсем правильно. Правильнее максимально ограничить доступ пользователя, который подключается удаленно. Поэтому команда может выглядеть так:
GRANT SELECT,INSERT,DELETE,UPDATE,CREATE,ALTER
ON 'имя_базы'.*
TO 'новый_пользователь'@'удаленный_адрес'
IDENTIFIED BY 'пароль'
WITH GRANT OPTION;
Этой командой мы ограничили полномочия пользователя только одной базой данных и действиями с ней.
Полный список всех прав, которые можно указать пользователю:
- ALL PRIVILEGES – все права на указанный объект за исключением назначения прав на этот объект;
- CREATE – право на создание таблицы;
- ALTER – право на изменение таблицы;
- DROP – право на уничтожение таблицы;
- LOCK TABLES – право на блокировку таблицы;
- CREATE TEMPORARY TABLES – право на создание временных таблиц;
- CREATE ROUTINE – право на создание хранимых процедур и функций;
- ALTER ROUTINE – право на изменение или уничтожение хранимых процедур и функций;
- CREATE VIEW – право на создание представления;
- TRIGGER – право на создание и уничтожение триггеров;
- INDEX – права на создание и уничтожение индексов;
- EXECUTE – право на выполнения хранимых процедур и функций;
- EVENT – право на создание событий;
- CREATE USER – права на создание, уничтожение, переименование пользователя и снятия все прав. Назначается только на глобальном уровне;
- SELECT – право на выборку;
- DELETE – право на удаление;
- INSERT – право на вставку;
- UPDATE – право на обновление;
- FILE – право на использование команд SELECT … INTO OUTFILE и LOAD DATA INFILE;
- PROCESS – право на просмотр всех процессов командой SHOW PROCESSLIST;
- SHOW DATABASES – право на просмотр списка схем;
- SHOW VIEW – право на просмотр списка представлений;
- SHUTDOWN – право на закрытие.
Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.
Вдохновлен
А не проще iptables’ом форвардить пакеты на порт к другой машине. Более того, необходимо огранччить количество запросов в минуту.и настройить fail2ban на авторизацию в мускуль. Иначе забрутят мускуль и привет.
Вообще-то из покон веков MySQL вешают на локалхост онли и подключаются к нему через SSH тунель с пробросом 8080 в обе стороны.
Отличная статья, спасибо. Обязательно будем использовать данный кейс.
А что мешает подключаться по ssh До сервера и с него уже юзать MySQL