Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
для студентов РУБД / Лаб раб 4 курс.doc
Скачиваний:
60
Добавлен:
21.03.2016
Размер:
635.39 Кб
Скачать

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

Для сервиса, который работает на другой машине. В общем случае нам необходимо выполнить 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-uroot–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.

Задание.