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

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

16 мая 2008, 4:49

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

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

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

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

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

  • mysql --host=myhost.ru
  • mysql -h myhost.ru
  • mysql -hmyhost.ru

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

В 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-адресов, придется каждый отдельно забивать руками или есть более удобное решение?
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 можно перечислять из через запятую?
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
Ответить
NO USERPIC

penelopus

есть сеть из нескольких машин, соединённых по wi-fi, одна из машин - сервер, на нём запущен дэнвер и есть база данных mysql, задача - запустить программу, написанную на c# с других машин, которая будет коннектиться к базе данных на сервере

вот код подключения к базе:
_connection = new MySqlConnection("Database=ИМЯ_Базы; Data Source=Имя_компа; User ID = root; Password=пустое_значение");
MySqlCommand command = _connection.CreateCommand();

но соединение не идёт даже с сервера... создала через phpMyAdmin нового пользователя root со всеми привилегиями и хост "%", что ещё надо сделать ?
18.02.2011, 13:02
Ответить
NO USERPIC

rgbeast

Попробуйте connectstring как описано здесь http://www.connectionstrings.com/mysql
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

Учтите, что root@'%' работает только для удаленных компьютеров, но не работает локально. Пароль лучше задайте непустой.
18.02.2011, 23:31
Ответить
NO USERPIC

penelopus

изменила строку подключения как вы посоветовали, появилась новая ошибка
http://webew.ru/f/xC94ingb.jpg
запускала и с сервера, и с удалённой машины, как с этим бороться??
21.02.2011, 14:18
Ответить
NO USERPIC

penelopus

закомментировала bind-address = 127.0.0.1
теперь всё в порядке
=)
21.02.2011, 14:58
Ответить
NO USERPIC

kost

Здравствуйте.
На одном конце имеем MySQL в интернете, на другом ПК связанный с GPS модемом по Com(RS-232) порту. Модем имеет встроенный TCP/IP стек. По виндовому гипер терминалу я могу связаться с удаленным хостом(в модеме есть соответствущие AT команды) , но могу ли я связаться с MySQL и записать в базу данные?
Заранее благодарен за ответ.
08.03.2011, 14:36
Ответить
NO USERPIC

rgbeast

Не должно быть проблем с подключением, если провайдер (GPRS) не блокирует порт 3306 наружу. Если провайдет блокирует порт 3306, переключите MySQL сервер так, чтобы он слушал порт 8082 (его обычно провайдеры не блокируют).
08.03.2011, 15:45
Ответить
NO USERPIC

kost

Большое спасибо. Обнадежили, буду пробовать.
Да пардон за ошибку, конечно же GSM модем
08.03.2011, 16:52
Ответить
NO USERPIC

andru

Последнее время я использую Valentina Studio для работы с MySQL. Очень хороший и бесплатный инструмент, рекомендую посмотреть.
16.09.2013, 13:32
Ответить
NO USERPIC

pupok

а где именно нужно вводить эти команды (в программе или в каком-то conf)???? C уважением, извиняюсь за вопрос я только учусь.
14.01.2014, 13:08
Ответить
NO USERPIC

vasya

В любом клиенте, который вы используете для работы с базой: mysql, phpmyadmin, mysql workbench и т.д.
14.01.2014, 15:58
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100