webew
Войти » Регистрация
 
MySQL

Настройка удаленного подключения к MySQL

16 мая 2008, 4:49
Автор: Василий Лукьянчиков [vasya]

Эта статья для тех, кто впервые столкнулся с необходимостью установить удаленное соединение с базой данных MySQL. В статье рассказывается о сложностях, которые могут возникнуть при настройке удаленного соединения и о методах их преодоления.

Как установить соединение с удаленной базой?

Для установления удаленного соединения нужно указать параметры, характеризующие устанавливаемое подключение. Это

Из четырех возможных протоколов удаленное подключение позволяет только TCP/IP, поэтому первым требованием является доступность компьютера из сети по TCP/IP. Далее необходимо добавить имя хоста (или ip адрес машины, на которой расположена база) в строке подключения:
mysql --host=host_name Обратите внимание, что указание в качестве имени хоста значения localhost (или же отсутствие такого параметра, что то же самое, так как это дефолтное значение) приводит к обращению на локальную машину.

Учтите, что параметры имеют две формы записи: длинную и короткую. В свою очередь, если параметр имеет значение (как например, в случае хоста необходимо указать имя хоста к которому нужно подключиться), то короткая форма записи может использоваться с пробелом или без (исключением из этого правила является пароль). Таким образом, следующие три записи являются эквивалентными:

Как настроить соединение с удаленной базой?

В MySQL пользователь характеризуется двумя параметрами: именем и хостом, с которого он может обращаться. По умолчанию доступ разрешен только с локальной машины, т.е. для пользователя user@localhost. Права на доступ пользователям даются с помощью команды GRANT. Команда выполняется под рутом.

Например, если я хочу создать юзера, который сможет коннектиться с любого хоста с полными правами, то следует выполнить следующую команду:
GRANT ALL PRIVILEGES ON `имя_базы`.* TO myuser@% IDENTIFIED BY 'пароль';

Примечание. Обратите внимание, что данная команда дает доступ пользователю myuser со всех IP кроме 127.0.0.1, соответсвующего localhost.
Для пользователя myuser@localhost необходимо давать права отдельной командой GRANT.

Если вы решите обратиться к локальной машине как к удаленной, используя протокол TCP/IP, то не забывайте, что myuser@localhost и myuser@ip_собственного_компа это разные пользователи и каждому из них права нужно давать отдельной командой.

Второй пример показывает как дать право читать таблицу time_zone в базе mysql пользователю myuser с машины 192.168.0.76 с паролем mypassy:

GRANT SELECT ON mysql.time_zone TO myuser@192.168.0.76 IDENTIFIED BY 'mypassy';

Возникающие сложности

Если после всех действий у вас возникает ошибка (Can't connect to Mysql Server on 'ваш IP'(10061)), значит соединение блокирует firewall (windows firewall, outpost, антивирус или еще что-то).

Если возникает ошибка (Client does not support autentification protocol request by server; consider upgrading MySQL client), клиент (то есть ваша программа) не поддерживает требуемый сервером протокол.
Эту ошибку можно исправить, установив пароль старого формата:

SET PASSWORD FOR user@host = OLD_PASSWORD('password');

© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.
Добавить комментарий
Отображение комментариев: Древовидное | Плоское

bur

Если необходимо открыть доступ для небольшой подсети, т.е. диапазона IP-адресов, придется каждый отдельно забивать руками или есть более удобное решение?
Fastcoder.org — портал для JavaScrpt-программистов
16.05.2008, 11:56
Ответить
NO USERPIC

rgbeast

Можно использовать маску '77.91.227.%' либо специальный синтаксис '77.91.227.0/255.255.255.0'
16.05.2008, 12:19
Ответить

bur

При добавлении группового доступа для двух-трех пар юзер@IP можно перечислять из через запятую?
Fastcoder.org — портал для JavaScrpt-программистов
16.05.2008, 12:59
Ответить
NO USERPIC

rgbeast

Можно, но повторять нужно вместе с куском IDENTIFIED BY 'password', см. http://dev.mysql.com/doc/refman/5.0/en/grant.html
16.05.2008, 13:08
Ответить
NO USERPIC

Sarkaznik

Все замечательно, а если стоит задача немного сложнее?
допустим есть сайт А где лежат файлы сайта и сайт Б на чьем хосте лежат БД (MySQL)
задача, НЕ!!! указывая пути, логин, пароля, в файле конекта сайта А к базам данных сайта Б, все же получать к ним доступ ?

То есть нужно настроить так файл подключения сайта А к БД сайта Б что бы хозяин сайта А при желании покапавшись в своем сайта - не получил в свое распоряжения пароли и логины напрямую к БД сайта Б.
15.08.2010, 14:41
Ответить
NO USERPIC

rgbeast

Иметь доступ, не имея пароля в MySQL невозможно. Хозяин сайта сможет в любом случае обратиться к базе, вписав необходимый запрос в исходники сайта.
15.08.2010, 21:21
Ответить
NO USERPIC

Sarkaznik

можно сделать учетку к бд с правами лишь на добавление новых данных, прав на удаление и редактирование нет,
но что если хостер дает лишь одну учетку, можно конечно переехать на другой хостинг, но!
есть замечательный файлик my.cnf возможно ли через него обрезать права пользователю с определенного ip, а другому разрешать, при условии что учетка одна и та же ?

блин ну должен же быть вариант ....
15.08.2010, 21:57
Ответить
NO USERPIC

rgbeast

Права пользователя регулируются на сервере, поэтому на клиенте это сделать не получится. Система прав MySQL сделана в предположении возможности создания пользователь. Если хостер эту функцию ограничивает, но она нужна, проще всего сменить хостинг или тариф.
16.08.2010, 23:12
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2007—2010 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100