По-умолчанию, сервер MySQL принимает запросы только с localhost, т.е. только с того компьютера, на котором он установлен. В большинстве случаев этого достаточно, тем более что такое поведение обеспечивает лучшую защищенность сервера от атак. Однако случается, что нужно предоставить доступ к базам данным пользователям из сети. Например, для сервиса, который работает на другой машине.
В общем случае нам необходимо выполнить 2 действия:
а) Разрешить серверу MySQL прослушивание на сетевых интерфейсах (не только на 127.0.0.1)
б) Создать разрешения для сетевых пользователей.
Если с первым пунктом более-менее ясно, то по пункту (б) необходимо пояснить. Дело в том, что обычно пользователи создаются вида 'username'@'localhost', что позволяет им цепляться с определенными привилегиями к определенным базам данных, но только с localhost. Из сети эти пользователи подключиться не могут - MySQL сообщает им, что пароль или имя пользователя неверны.
Фишка заключается в том, что MySQL содержит список пользователей, разделенный по машинам, с которых они могут цепляться. Так, пользователь User1 может подключаться с localhost с паролем ABCD, с адреса 192.168.0.1 он может быть прописан с паролем BBBCCC, а с адреса 192.168.1.1 - уже с паролем BCDE и только для некоторых баз. Т.е. мы можем задать - с каких компьютеров пользователю разрешено подключаться, какой пароль он будет иметь в таком случае и к каким базам у него будут привилегии. На самом же деле, если взглянуть в базу данных mysql, то мы увидим, что это не один пользователь, а 3 разных юзера: user1@localhost, user1@192.168.0.1 и user1@192.168.1.1. Т.е. с точки зрения MySQL - это разные пользователи, соответственно, имеющие разные привилегии и пароли.
Таким образом, чтобы получить доступ из сети, нам необходимо завести дополнительных пользователей в MySQL с указанием уже не localhost. Причем, Вы можете как указать конкретные IP адреса, с которых разрешено этим пользователям подключаться, так и специальный символ '%', который обозначает "любые компьютеры, кроме localhost".
Вот пример имен пользователей:
- username@'localhost' : подключаться может только с localhost
- username@'192.168.0.1' : подключаться может только с 192.168.0.1
- username@'%' : подключаться может с любого компьютера, кроме localhost
- username@'192.168.0.%' : подключаться может с любого компьютера, IP-адрес которого начинается с 192.168.0.
Как видно, для localhost пользователя необходимо всегда указывать отдельно.
Если же необходимо указание нескольких IP-адресов для одного пользователя... придется заводить эти IP-адреса отдельно, к сожалению, либо через запятую, но после каждой запятой - опять конструкция вида IDENTIFIED BY.
Итак, давайте дадим к серверу MySQL доступ из сети.
1) Во-первых, необходимо проверить, что сервер слушает запросы не только на localhost.
Для Debian:
Открываем файл /etc/mysql/my.cnf и ищем в нем строчку bind-address. Нам нужно, чтобы она была раскоментирована и содержала значение 0.0.0.0 :
# cat /etc/mysql/my.cnf | grep bind-address
bind-address = 0.0.0.0
Если строчку Вы меняли - необходимо перезагрузить сервер MySQL:
# /etc/init.d/mysql restart
Для FreeBSD:
По-умолчанию во FreeBSD сервер MySQL слушает на всех доступных интерфейсах и ничего дополнительно менять не нужно.
2) Теперь необходимо добавить пользователей, имеющих доступ из сети. Без этого сервер будет слушать сеть, но пускать все равно к себе не будет.
# mysql -u root -p
Password:
// приветствие MySQL
mysql> GRANT ALL PRIVILEGES ON *.* TO 'user1'@'192.168.0.%' IDENTIFIED BY 'password1';
mysql> GRANT ALL PRIVILEGES ON mydatabase.* TO 'user2'@'%' IDENTIFIED BY 'password2';
В этом коде пользователю user1 разрешается полный доступ ко всем базам на сервере, но только с компьютеров из сети 192.168.0.*
Второму же пользователю разрешается заходить с любого компьютера вообще (кроме localhost, конечно), но он имеет полный доступ только к базе mydatabase.
По подобию можно добавлять необходимых пользователей с необходимыми привилегиями.
3) Проверяем сетевой доступ.
$ mysql -u username -p -h 192.168.0.100
Вместо 192.168.0.100 - укажите IP адрес машины с MySQL сервером, а вместо username - имя пользователя.
Если сервер не пускает - в первую очередь проверьте - а не стоит ли на пути к нему файерволов и открыт ли на этих файерволах порт MySQL: 3306.
Ну вот и все.
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)