Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Доступ к MySQL из сети

Практика



По-умолчанию, сервер 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.


Ну вот и все.
создано: 2017-05-09
обновлено: 2024-11-11
3435



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Базы данных - MySql (Maria DB)

Термины: Базы данных - MySql (Maria DB)