Mysql

Доступ извне к mysql: Как отркрыть доступ к mysql из-вне

Содержание

Как отркрыть доступ к mysql из-вне

Для доступа к MySQL из-вне должно быть выполнено 2 условия:

  1. MySQL должен слушать все адреса, а не только 127.0.0.1
  2. У пользователя должны быть пермишены для коннекта не только с localhost (с самого сервера где установлена БД), а и других адресов.

Слушать все адреса

Во-первых, изначально mysql слушает только localhost. Нужно исправить это в конфигурационном файле my.cnf (обычно в линуксах путь /etc/mysql/my.cnf). В my.cnf находим строку:

bind-address = 127.0.0.1

И заменяем её на:

bind-address = 0.0.0.0

Теперь после service mysql restart мы можем коннектиться к mysql с любого ip (если создан пользователь). При этом для супер-пользователя root доступ из-вне под пустым паролем остаётся закрыт.

bind-address 127.0.0.1 означает, что mysql слушает соединения только с текущего хоста.

Создание пользователя для коннекта к базе данных из-вне

Во-вторых, нужно создать пользователя, под которым мы будем подключаться из-вне к mysql. У пользователя должны быть пермишены для подключения не только по localhost, но и иных адресов.

CREATE USER 'username'@'%' IDENTIFIED BY 'password'; #создаём пользователя username с паролем password
GRANT ALL PRIVILEGES ON database.* TO 'username'@'%'; #даём пользователю username все права для работы с базой данных database
FLUSH PRIVILEGES; # применяем новые права (чтобы не делать restart)

В команде CREATE USER мы создали пользователя, который может коннектиться к mysql со всех ip. Мы можем разрешать коннектиться только с определённых ip, например:

#создаём пользователя user с паролем pass, который может подключаться только с ip '10.10.50.50
CREATE USER 'user'@'10.10.50.50' IDENTIFIED BY 'pass';

Если разрешаете внешние подключения к базе данных, то нужно давать сложные пароли пользователям mysql.

В случае проблем с внешними подключениями, проверить не блокирует ли брандмауэр или фаервол MySQL-порт 3306 или другой, если используете не стандартный порт.

Узнать порт mysql:

mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0,05 sec)

После изменения bind-address в MySQL и создания пользователя с пермишенами (либо грант пермишенов текущим пользователям), к базе данных можно подключиться передавая параметр -h <host>. Хост — адрес машины, на которой установлен MySQL:

mysql -u -root -p -h <ip адрес>

Как разрешить внешние подключения к MySQL и MariaDB в Linux Ubuntu

По умолчанию сервер MySQL настроен таким образом, что к нему разрешены подключения только с локальной машины, следовательно, подключиться из-вне (по интернет или локальной сети) не получится.

Убедиться в этом можно набрав на сервере команду:

sudo netstat -tlp

В результате получите что-то типа этого:

Активные соединения с интернетом (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost:mysql *:* LISTEN 634/mysqld 
tcp 0 0 *:http *:* LISTEN 987/nginx -g daemon
tcp 0 0 *:ssh *:* LISTEN 375/sshd 
tcp6 0 0 [::]:http [::]:* LISTEN 987/nginx -g daemon
tcp6 0 0 [::]:ssh [::]:* LISTEN 375/sshd

Отсюда видно, что mysql слушает только интерфейс localhost (127.0.0.1). Это не всегда удобно, особенно когда есть необходимость выделить под сервер mysql отдельный сервер. А в рамках корпоративной локальной сети такое бывает очень часто.

Чтобы разрешить серверу MySQL принимать запросы из-вне необходимо предпринять несколько несложных шагов:

  1. Поменять одну строчку в конфигурационном файле MySQL;
  2. Создать сетевого пользователя с необходимыми правами.

Разрешаем MySQL слушать интерфейс, который смотрит во внешнюю сеть

Открываем конфигурационный файл любимы редактором, например nano, из под привилегированного пользователя:

sudo nano /etc/mysql/my.cnf

Если у вас установлен сервер mariaDB, то конфигурационный файл находится в другом месте:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Находим строчки:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1

и меняем 127.0.0.1 на 0.0.0.0 — тогда сервер будет слушать все интерфейсы компьютера, либо задаем конкретный ip-адрес локального интерфейса, который смотрит в локальную сеть. Например — 192.168.122.10.

Получаем

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0

Теперь остается только перезапустить сервис MySQL:

sudo service mysql restart

Теперь осталось только завести пользователя, которому разрешено обращаться к серверу MySQL извне.

Создание внешнего пользователя MySQL

Теперь нужной подключиться к MySql с паролем суперпользователя системы (системы!!! а не MySQL):

sudo mysql

После подключения к MySQL можно создать пользователя и дать привилегию, например:

mysql> GRANT ALL PRIVILEGES ON userdata.* TO 'user'@'%' IDENTIFIED BY 'password';

Здесь дается полный доступ к базе данных userdata пользователю с логином user и паролем password, подключающемуся с любого ip.

Можно ограничить права пользователя, разрешив ему подключаться к базе только с определенного ip. Для этого меняем % на конкретный ip-адрес, например 192.168.122.16

mysql> GRANT ALL PRIVILEGES ON userdata.* TO 'user'@'192.168.122.16' IDENTIFIED BY 'password';

А можно и разрешить пользователю всё — подключаться ко всем базам с любого ip-адреса

mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password';

Это делать не желательно, если конечно вы не заводите себя.

MySql настройка удаленного доступа (Ubuntu Linux)

По умолчанию MySql настроен таким образом, что к нему разрешены подключения только с локальной машины, следовательно, подключиться из-вне (по интернет или локальной сети) не получится.

Чтобы настроить удаленный доступ к MySql (настройка производится на операционной системе Ubuntu Linux и может отличаться для других ОС) необходимо отредактировать файл с настройками (конфигурационный файл). Обычно он располагается по пути /etc/mysql и называется my.cnf, хотя бывают и другие настройки.

Чтобы отредактировать файл с настройками MySql необходимо выполнить следующую команду:

sudo nano /etc/mysql/my.cnf

Если файл с настройками находится по пути /etc/mysql/mysql.conf.d/ и называется mysqld.cnf, тогда так:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Далее необходимо найти такую строку в открытом файле:

bind-address	= 127.0.0.1

В данной строке указывается, с каких адресов разрешено подключение к MySql, в данном случае только с адреса 127.0.0.1, то есть с локальной машины (127.0.0.1 = localhost). Для того, чтобы открыть доступ к нужному IP, его нужно прописать вместо 127.0.0.1. Если необходим доступ с любого адреса, то написать как показано ниже.

bind-address	=  0.0.0.0

После замены настроет bind-address MySql, его необходимо перезапустить:

sudo service mysql restart

Или так:

/etc/init.d/mysql restart

Теперь нужной подключиться к MySql с паролем суперпользователя:

sudo mysql -p

После подключения к MySql нужно создать пользователя и дать привилегию, например:

mysql> GRANT ALL PRIVILEGES ON userdatabase.* TO 'user'@'192.168.0.10' IDENTIFIED BY 'password'; 

В данном случае дается полный доступ к базе данных userdatabase пользователю с логином user и паролем password, подключающемуся с IP 192.168.0.10.

Если необходимо разрешить доступ ко всем базам, то вместо имени базы данных пишется знак *, если необходимо разрешить доступ с любого IP, то вместо IP адреса пишется знак %. Ниже представлен пример, разрешающий пользователю user полный доступ ко всем базам данных с любого IP.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password'; 

Данная инсрукция справедлива и для других linux дистрибутивах, основанных на debian.

Как удаленно подключиться к MySQL – База знаний Timeweb Community

Подключаться к базам данных можно разными способами. Подключение, устанавливаемое с сервера, называется локальным. С помощью такого типа подключения можно работать с домашнего компьютера, при этом используя любые удобные приложения по управлению базами данных.


Я расскажу, как подключиться к удаленной базе данных MySQL, какие существуют способы, а также опишу некоторые типичные ошибки.


Подключение через панель управления TimeWeb


Чтобы подключиться удаленно к MySQL, необходимо для начала открыть сайт хостинга и авторизоваться в личном кабинете. В панели управления следует выбрать раздел «Базы данных MySQL», через него и будем проводить операции. В новом открывшемся окне находим ссылку «Добавить доступ» напротив того сервера, к которому планируется подключиться. Для разрешения доступа к подсети /24 меняем последний актет IP-адреса на знак %.


При установлении соединения используем имя сервера или его IP-адрес. Данная информация доступна на главной странице в разделе «Информация о сервере». Порт указываем 3306, имя пользователя будет тем же, что и название базы данных. Вводим пароль и устанавливаем соединение.


phpMyAdmin


phpMyAdmin – программное средство, предоставляющее веб-интерфейс для работы с сервером MySQL. Подключиться к базе можно, открыв раздел «Базы данных MySQL» в панели управления хостингом. Находим на странице ссылку «phpMyAdmin» и жмем по ней для подключения. Если она недоступна, значит, пользователем был превышен лимит доступных БД. Увеличить его можно сменой тарифа.


Входим в данный раздел, вбиваем все данные и подключаемся.


Соединение через SSH туннель


Данный тип подключения считается более безопасным, потому что все данные по SSH-туннелю передаются в зашифрованном виде, исключая возможность перехвата.


Подключение в Windows


В данной ОС соединение по SSH протоколу можно осуществить с помощью специальных программ для управления базами данных. Например, PuTTY (бесплатная программа) или SecureCRT (платное ПО, но с пробной версией на 30 дней).


Мы для работы выбрали PuTTY. Скачиваем установщик с официального сайта и устанавливаем приложение. Запускаем программу, затем переходим в раздел «Session». В поле «Host Name» вводим свой домен или указываем его IP-адрес.



Далее переходим в категорию «Connection», открываем вкладку «SSH», затем «Tunnels». В поле «Source Port» указываем значение 3306, в «Destination» вбиваем localhost:3306, потом жмем на кнопку «Add» для добавления порта в список. И только потом жмем кнопку «Open» для установления соединения с хостом.



Логин и пароль те же самые, которые используются для входа в панель управления. При подключении используем имя пользователя и пароль, выданные при создании базы данных. Адрес сервера — 127.0.0.1, порт для подключения 3306.


Предупреждаем, что если вы уже устанавливали сервер баз данных MySQL на своем компьютере, то соединение через порт 3306 будет недоступно. Надо будет указать другое значение, например 3307.


Подключение в Linux


В ОС Linux никакого дополнительного ПО устанавливать не придется, можно все провести через командную строку «Терминал». Перед тем как подключиться к MySQL удаленно, нужно создать SSH-туннель. Вводим вот такую команду:



ssh -L3306:localhost:3306 -n логин@site.com


Потом в конфигурационном файле MySQL потребуется изменить параметр, отвечающий за удаленное подключение. Открываем в «Терминале» файл, дав вот такую команду:



sudo nano /etc/mysql/my.cnf


Далее комментируем нужную нам строку. В итоге она должна выглядеть вот таким образом:



# bind-address = 127.0.0.1


Сохраняем изменения, потом перезапускаем MySQL вот такой командой:



sudo service mysql restart


Далее будет запрошен пароль для входа в панель управления хостингом, вводим его. Для подключения к удаленному серверу MySQL необходимо создать пользователя, и делается это вот такой командой:



GRANT ALL ON *.* TO имя_пользователя@127.0.0.1 IDENTIFIED BY 'пароль'


Так мы создадим пользователя с неограниченным доступом ко всем базам на указанном сервере. Потом проверяем подключение утилитой telnet. Если сервер запрос не отклонил, значит, пора приступать к подключению. Для этого можно задать команды вот таких типов:



mysql -u имя_пользователя –h 127.0.0.1 –p

mysql -h наименование_хоста -u dbUser -p dbName


Как проверить соединение с базой данных MySQL


Для проверки подключения к базе данных MySQL во всех ОС используем утилиту telnet. Нужно просто открыть командную строку и набрать в ней вот такую команду:



telnet 127.0.0.1 3306


Если соединение установится, то настройка туннеля прошла успешно, можно приступать к подключению. Если нет, рекомендуем тщательно проверить все настройки.


Распространенные проблемы и ошибки при подключении к MySQL


Как подключиться к MySQL удаленно, если возникают какие-то ошибки? Трудности обычно возникают при наличии запрещающих правил. Проверить, существуют ли такие, можно вот таким запросом:



iptables-save


Если таковые обнаружатся, добавим разрешающее правило. Для этого надо ввести соответствующую команду, она должна выглядеть примерно вот так:



/sbin/iptables -A INPUT -i eth0 -p tcp —destination-port 3306 -j ACCEPT


Если при подключении возникает ошибка «Can’t connect to Mysql Server on ‘IP_адрес'(10061)», соединение заблокировал брандмауэр, firewall, outpost, антивирус и прочие программы. Для UFW, инструмента брандмауэра в Ubuntu, можно задать вот такую команду, разрешающую доступ с любого IP-адреса:



sudo ufw allow 3306/tcp


Есть еще возможность открыть доступ для определенного IP-адреса, и это куда более безопасный способ. Для этого потребуется ввести такой запрос:



sudo ufw allow from IP_адрес to any port 3306


Если же появляется ошибка типа «Client does not support autentification protocol request by server; consider upgrading MySQL client», это значит, что установленный клиент не поддерживает требуемый сервером протокол.


Эту ошибку можно исправить, установив пароль старого формата:



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


Если при проверке выходит ошибка формата «ERROR 2003 (HY000): Can’t connect to MySQL server», это значит, что порт 3306 не открыт. Либо сервер MySQL не прослушивает указанный IP-адрес.


В случае, когда выходит сообщение «ERROR 1130 (HY000): Host ‘10.8.0.5’ is not allowed to connect to this MySQL server», указывается отсутствие прав доступа к удаленному серверу у пользователя.


Ошибка «1045 невозможно подключиться к серверу MySQL» возникает при попытке подключиться удаленно к базам данных через phpMyAdmin. Причиной тому может быть неправильно введенный логин или же отсутствие пароля у пользователя или его неправильная смена.


Заключение


MySQL – один из самых популярных серверов баз данных с открытым исходным кодом. Подключиться к нему можно разными способами, причем как локально, так и удаленно. Если в процессе соединения возникают нетипичные ошибки, рекомендуем связаться со службой технической поддержки. 

Как разрешить удаленные подключения к серверу базы данных MySQL

По умолчанию сервер MySQL прослушивает соединения только от localhost, что означает, что к нему могут обращаться только приложения, работающие на одном хосте.

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

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

Первый шаг – настроить сервер MySQL на прослушивание определенного IP-адреса или всех IP-адресов на компьютере.

Если сервер MySQL и клиенты могут взаимодействовать друг с другом через частную сеть, то лучшим вариантом будет настроить сервер MySQL на прослушивание только по частному IP. В противном случае, если вы хотите подключиться к серверу через общедоступную сеть, настройте сервер MySQL на прослушивание всех IP-адресов на компьютере.

Для этого вам нужно отредактировать файл конфигурации MySQL и добавить или изменить значение опции bind-address. Вы можете установить один IP-адрес и IP-диапазоны. Если адрес есть 0.0.0.0, сервер MySQL принимает соединения на всех интерфейсах IPv4 хоста. Если в вашей системе настроен IPv6 0.0.0.0, используйте вместо ::.

Расположение файла конфигурации MySQL зависит от дистрибутива. В Ubuntu и Debian файл находится по адресу /etc/mysql/mysql.conf.d/mysqld.cnf, в то время как в дистрибутивах на основе Red Hat, таких как CentOS, файл находится по адресу /etc/my.cnf.

Откройте файл в текстовом редакторе :

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Найдите строку, которая начинается с bind-address и установите в качестве значения IP-адрес, который должен прослушивать сервер MySQL.

По умолчанию установлено значение 127.0.0.1 (прослушивается только на локальном хосте).

В этом примере мы настроим сервер MySQL на прослушивание всех интерфейсов IPv4, изменив значение на 0.0.0.0
mysqld.cnf

bind-address           = 0.0.0.0
# skip-networking

Если есть строка, содержащая skip-networking, удалите ее или закомментируйте, добавив # в начале строки.

В MySQL 8.0 и выше директива bind-address может отсутствовать. В этом случае добавьте ее в разделе [mysqld].

После этого перезапустите службу MySQL, чтобы изменения вступили в силу. Только root или пользователи с привилегиями sudo могут перезапускать сервисы.

Чтобы перезапустить службу MySQL в Debian или Ubuntu, введите:

sudo systemctl restart mysql

В дистрибутивах на основе RedHat, таких как CentOS, для перезапуска службы выполните:

sudo systemctl restart mysqld

Следующим шагом является предоставление доступа к базе данных удаленному пользователю.

Войдите на сервер MySQL от имени пользователя root, введя:

sudo mysql

Если вы используете старый плагин аутентификации MySQL для входа в систему от имени пользователя root, введите команду ниже и введите пароль при появлении запроса:

mysql -uroot -p

Внутри оболочки MySQL используйте GRANTоператор для предоставления доступа удаленному пользователю.

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

Где:

  • database_name – Имя базы данных, к которой будет подключаться пользователь.
  • user_name – это имя пользователя MySQL.
  • ip_address – это IP – адрес , с которого пользователь будет подключаться. Используйте, %чтобы позволить пользователю подключаться с любого IP-адреса.
  • user_password – это пароль пользователя.

Например, чтобы предоставить доступ к базе данных dbname пользователю с именем andreyex с паролем my_passwd с клиентского компьютера с IP 10.8.0.5, вы должны выполнить:

GRANT ALL ON dbname.* TO andreyex@'10.8.0.5' IDENTIFIED BY 'my_passwd';

Последний шаг – настройка брандмауэра для разрешения трафика через порт 3306( порт MySQL по умолчанию) с удаленных компьютеров.

Если вы используете iptables в качестве брандмауэра, команда ниже разрешит доступ с любого IP-адреса в Интернете к порту MySQL. Это очень небезопасно.

sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

Разрешить доступ с определенного IP-адреса:

sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

UFW – это инструмент брандмауэра по умолчанию в Ubuntu. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), выполните:

sudo ufw allow 3306/tcp

Разрешить доступ с определенного IP-адреса:

sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD является инструментом управления брандмауэром по умолчанию в CentOS. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), введите:

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --reload

Чтобы разрешить доступ с определенного IP-адреса на конкретном порту, вы можете создать новую зону FirewallD или использовать расширенное правило. Хорошо создайте новую зону с именем mysqlzone:

sudo firewall-cmd --new-zone=mysqlzone --permanentsudo firewall-cmd --reload
sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32
sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp
sudo firewall-cmd --reload

Чтобы убедиться, что удаленный пользователь может подключиться к серверу MySQL, выполните следующую команду:

mysql -u user_name -h mysql_server_ip -p

Где user_name имя пользователя, которому вы предоставили доступ и mysql_server_ip, IP-адрес хоста, на котором работает сервер MySQL.

Если все настроено правильно, вы сможете войти на удаленный сервер MySQL.

Если вы получаете сообщение об ошибке, как показано ниже, либо порт 3306 не открыт, либо сервер MySQL не прослушивает IP-адрес.

ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

Приведенная ниже ошибка указывает на то, что пользователь, которому вы пытаетесь войти, не имеет прав доступа к удаленному серверу MySQL.

"ERROR 1130 (HY000): Host ‘10.8.0.5’ is not allowed to connect to this MySQL server"

MySQL, самый популярный сервер баз данных с открытым исходным кодом по умолчанию, прослушивает входящие соединения только на локальном хосте.

Чтобы разрешить удаленные подключения к серверу MySQL, вам необходимо выполнить следующие шаги:

  1. Настройте сервер MySQL для прослушивания всего или определенного интерфейса.
  2. Предоставьте доступ удаленному пользователю.
  3. Откройте порт MySQL в вашем брандмауэре.

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Даем доступ к базе данных MySQL из вне — WebSofter

Часто, этот процесс сопровождается ошибкой запрета доступа извне типа на подобие:

host ‘myhost’ is not allowed to connect to this mysql server

или таким:

Can't Connect to MySQL Server on IPAddress (10061)

Для решения данной проблемы нужно сделать следующие шаги

Для начала, проверим настройки в файле /etc/mysql/mysql.conf.d/mysqld.cnf

port = 3306
#skip-networking (в смысле, закомментировано)
bind-address = IP_СЕРВЕРА_(НЕ_127.0.0.1)

Дальше, когда пытаемся присоединиться к базе, например, любой управлялкой базами (SQL Manager Lite как вариант — удобно, бесплатно, но на буржуйском наречии), получаем соообщение о том, что наш комп не может соединяться с мускул сервером…

Вариант с firewall исключим для простоты восприятия, но проверить не помешает на будущее.

Дело в том, что MySQL не только умеет ограничить доступ извне к самому серверу, но еще и определить пользователей для доступа удаленно к определенным базам или даже таблицам.

Сначала входим в консоль MySQL:

mysql -u <username> -p<password> <database_name>

Создаем пользователя test с полными правами для базы my_db с паролем superpass

GRANT ALL PRIVILEGES ON `my_db`.* TO test@'%' IDENTIFIED BY 'superpass'

Это создаст пользователя и даст ему права (GRANT) на соединение со всех хостов кроме localhost (127.0.0.1)!

А следующий запрос даст право читать таблицу my_table в базе my_db пользователю test с компьютера 192.168.0.10 с паролем superpass:

GRANT SELECT ON my_db.my_table TO [email protected] IDENTIFIED BY 'superpass';

По умолчанию, режим безопасности подключения к MySQL находится под статусом MEDIUM , нам нужно перевести его в режим LOW командой MySQL

mysql> SET GLOBAL validate_password_policy=LOW;

Или это же можно сделать через конфигурационный файл, записав в  my.cnf строчку:

[mysqld]
validate_password_policy=LOW

 

 

 

Управление удалённым доступом к серверу MySQL

Нередко, удалённый доступ к серверу MySQL — это единственный способ управления своими базами данных (БД). Для хостинг-провайдеров подобная техническая возможность является обязательной для качественного предоставления услуг клиентам. Для веб-разработчиков (вообще для разработчиков) удалённый доступ позволяет использовать один общий ресурс для обслуживания БД. В любом случае, просто так по-умолчанию сервер MySQL удалённые подключения не допускает. Для включения удалённого доступа к MySQL необходимо конфигурирование определённых параметров как самого сервера, так и обслуживаемых БД и их пользователей. В данной статье будут рассмотрены основные принципы предоставления удалённого доступа к серверу MySQL.

Что для этого нужно?

Сервер MySQL по-умолчанию в целях безопасности сконфигурирован таким образом, что может принимать только локальные соединения, поступающие через локальный сокет с той же самой машины, на которой работает и сам сервер. Эта настройка обслуживается опцией «bind-address» в конфигурационном файле MySQL-сервера

/etc/mysql/mysql.conf.d/mysqld.cnf. Изменив значение указанной опции и перезапустив сервер MySQL можно предоставить доступ для удалённых клиентов.
Кроме самой возможности удалённого подключения к серверу MySQL необходимо также и позаботиться о предоставлении соответствующих привилегий удалённым пользователям. Это также очень важно как для комфортной работы, так и для безопасности. Привилегии пользователей MySQL предоставляются как для подключений, так и для работы

непосредственно с БД. В первом случае для пользователя могут быть заданы привилегии, ограничивающие его действия для конкретного типа подключения. Например, удалённо пользователь не может удалять БД. При этом неважно, что сервер корректно настроен для удалённого доступа. Во втором случае у пользователя могут быть заданы ограничения на уровне самих БД, таблиц и процедур, действующие только при удалённом подключении и отсутствующие при локальном. Например, так бывает, когда системный администратор MySQL не хочет, чтобы БД, таблицы, данные можно было удалить работая с сервером через удалённое подключение, а только локально.

Таким образом, существует возможность задания привилегий, т. е. управления доступом не только для самих пользователей и групп. Но и для характера их подключения к серверу — удалённого или локального. Это необходимо учитывать при организации и управлении удалённым доступом к MySQL-серверу.

Настройка сервера MySQL

По-умолчанию для опции «bind-address» в файле /etc/mysql/mysql.conf.d/mysqld.cnf задано значение 127.0.0.1. И подключиться к серверу можно только локально:

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
. . .

Для того, чтобы иметь доступ к MySQL-серверу с любого IP-адреса, т. е. с любого компьютера в сети, нужно значение 127.0.0.1 изменить на 0.0.0.0:

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
. . .

Сделав изменения в и сохранив файл нужно перезапустить сам сервер MySQL:

$ sudo systemctl restart mysql

Далее можно проверить, что удалённое подключение возможно, выполнив его с другого компьютера в сети:

$ mysql -u user_name -h db_host -p

Здесь «db_host» – это адрес (IP или имя хоста) компьютера, на котором работает сервер MySQL. При удачном подключении пользователь будет переведён в интерфейс командной консоли MySQL.

Настройка привилегий БД

На сервере MySQL может быть несколько пользователей с одинаковым именем, но разным режимом доступа. Например, пользователь с именем john, которому доступно только локальные подключения. На самом деле распознается сервером MySQL как пользователь с именем «john@localhost». Для того, чтобы пользователь john мог подключаться ещё и удалённо с любого IP. На сервере должна быть создана ещё одна учётная запись с именем «john@%». Вот как выглядит создание такой учётной записи в веб-интерфейсе phpMyAdmin:

Как можно видеть, в системе управления доступом MySQL для учётной записи пользователя существует отдельный атрибут «имя хоста», регламентирующий режим подключения. Это сделано как для повышения самой безопасности, так и для более гибкого управления и администрирования. Тот случай, когда одно другому не только не мешает. Но в совокупности поднимает эффективность и безопасность всего сервиса.

Поскольку учётные записи john@localhost и john@% являются разными (хотя и принадлежат одному пользователю), то для них можно отдельно настраивать привилегии. Например, для учётной записи john@% в phpMyAdmin это выглядит следующим образом:

Как можно видеть, администратор запретил пользователю john удалять БД через удалённое подключение. Таким же образом можно устанавливать (или убирать) ограничения на уровне БД. Т. е. при работе с таблицами, а также на уровне таблиц — при работе непосредственно с данными.

Заключение

В заключение стоит ещё раз отметить, что предоставление удалённого доступа к БД путём изменения параметра bind-address в значение 0.0.0.0 должно проводиться с учётом принятых мер по обеспечению дополнительной безопасности сервера.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как включить внешний доступ к серверу MySQL?

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

.

phpmyadmin — Удаленный доступ к MySQL на моем веб-сервере

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.

Внешний доступ к базе данных WP

@davidwilbour.,

У меня один вопрос: нужен ли вам доступ к таблицам, отличным от WP, в исходном коде WordPress или во внешнем источнике?

Если это в wp, вы можете получить доступ с помощью глобальной переменной $ wpdb

https://codex.wordpress.org/Class_Reference/wpdb

Каждый раз, когда вы получаете сообщение об ошибке «Доступ запрещен», это потому, что вы используете неправильное имя пользователя / пароль для пользователя MySL, настроенного для этой базы данных.Вы видите ошибку MySQL, а не WordPress. Вам нужно будет проверить учетные данные пользователя, которые вы используете, и увидеть, где они неверны.

Catacaustic,
Я тоже подумал, что это неправильный пользователь / пароль, но я могу подключиться нормально. Ошибка возникает только тогда, когда я выполняю инструкцию SQL. Если я меняю пароль или пользователя на что-то явно неправильное, я сразу получаю сообщение об ошибке «Доступ запрещен». Я пытаюсь открыть соединение, поэтому я думаю, что это должно быть что-то другое.

Rajan,
Я уже могу получить доступ к таблицам, отличным от WP, это таблицы WP, к которым я не могу получить доступ из внешней программы.

Насколько мне известно, открытие соединения только подключает к серверу, это фактически не проверяет, есть ли у пользователя права доступа к этой базе данных. Ошибка отказа в доступе возникает из-за того, что у пользователя не установлены разрешения для этой базы данных при попытке выполнить запрос. Я бы перепроверил разрешения, чтобы убедиться, что MySQL, который вы используете, имеет необходимые разрешения для таблиц, которые вы пытаетесь запросить.

Чтобы выяснить это, выполните другой запрос, максимально общий. Что-то вроде:

ВЫБРАТЬ * ИЗ wp_posts

Или даже любую из ваших собственных таблиц в этой базе данных. Если вы получите сообщение об ошибке, у этого пользователя возникнут проблемы с разрешениями. Если вы получите результат, у вас будет проблема с оператором SQL в исходном запросе.

Решено!

Ошибка тупого новичка: я установил узел доступа для внешней базы данных в DirectAdmin на свой компьютер, но забыл сделать это для базы данных WP.Как только я добавил, что у меня есть доступ к базе данных WP.

Простите за то, что потратил впустую время. По крайней мере, это может помочь следующему новичку!

.

Как ограничить доступ к порту MySQL

В некоторых дистрибутивах Linux порт 3306 открыт после установки MySQL. В этой статье описаны два метода ограничения или блокировки доступа к порту 3306 на неуправляемом сервере.

Информация в этой статье относится только к неуправляемым продуктам. У вас должен быть root-доступ к серверу, чтобы выполнять описанные ниже процедуры.

Метод №1: отключение сети MySQL

Если вам не нужен доступ к MySQL с внешнего компьютера, вы можете отключить сеть MySQL.

Следуйте процедуре, описанной ниже для вашего дистрибутива Linux.

Даже с отключенной сетью MySQL вы все равно можете безопасно получить доступ к MySQL с удаленного компьютера, если вам нужно. Для этого вы можете настроить SSH-туннель. Информацию о том, как это сделать, см. В этой статье.

CentOS и Fedora

Чтобы отключить сеть MySQL в CentOS и Fedora, выполните следующие действия:

  1. Войдите на свой сервер, используя SSH.
  2. В командной строке используйте предпочитаемый текстовый редактор, чтобы открыть файл / etc / my.cnf файл.
  3. Найдите следующую строку в файле my.cnf :
     # пропустить-сеть 

    Если этой строки нет в файле my.cnf , добавьте ее.

  4. Удалите знак # в начале строки, чтобы строка выглядела следующим образом:

     skip -etwork 
  5. Сохраните изменения в файле /etc/my.cnf , а затем выйти из текстового редактора.
  6. Введите следующую команду для перезапуска службы MySQL:

     service mysqld restart 

    Порт 3306 теперь закрыт на сервере.

Debian и Ubuntu

По умолчанию MySQL в Debian и Ubuntu настроен на использование только интерфейса localhost (IP-адрес 127.0.0.1) для работы в сети. Это означает, что порт 3306 закрыт для внешних подключений. Чтобы убедиться, что это конфигурация вашего сервера, выполните следующие действия:

  1. Войдите на свой сервер, используя SSH.
  2. В командной строке используйте предпочитаемый текстовый редактор, чтобы открыть файл /etc/mysql/my.cnf .
  3. Найдите строку MySQL адрес привязки в файле my.cnf . Должно получиться так:
     адрес привязки = 127.0.0.1 

    Если строка MySQL bind-address установлена ​​на 0.0.0.0 (или вообще без адреса), то соединения открыты на всех интерфейсах.

  4. Если вы внесли изменения

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *