предоставить удаленный доступ к базе данных MySQL с любого IP-адреса - PullRequest
250 голосов
/ 02 декабря 2011

Мне известна эта команда:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Но тогда это только позволяет мне предоставить определенный IP-адрес для доступа к этой удаленной базе данных MySQL. Что если я хочу, чтобы любой удаленный хост мог получить доступ к этой базе данных MySQL? Как я могу это сделать? По сути, я делаю эту базу данных общедоступной, чтобы каждый мог получить к ней доступ.

Ответы [ 21 ]

243 голосов
/ 02 декабря 2011
TO 'user'@'%'

% - это подстановочный знак - вы также можете сделать '%.domain.com' или '%.123.123.123' и тому подобное, если вам нужно.

152 голосов
/ 22 сентября 2015

Включить удаленный доступ (предоставление) Домой / Учебники / Mysql / Включить удаленный доступ (предоставление) Если вы попытаетесь подключиться к серверу MySQL с удаленного компьютера и столкнетесь с ошибкой, как показано ниже, эта статья для вас.

ОШИБКА 1130 (HY000): хосту 1.2.3.4 не разрешено подключаться к этому серверу MySQL

Изменить конфигурацию mysql

Начать с редактирования конфигурации mysqlfile

vim /etc/mysql/my.cnf

Закомментируйте следующие строки.

#bind-address           = 127.0.0.1
#skip-networking

Если вы не нашли строку пропуска сети, добавьте ее и закомментируйте.

Перезапустите сервер mysql.

~ /etc/init.d/mysql restart

Изменение привилегии GRANT

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

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

Запустите команду, подобную приведенной ниже, для доступа со всех машин.(Замените USERNAME и PASSWORD своими учетными данными.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Выполните команду, подобную приведенной ниже, чтобы получить доступ с определенного IP-адреса.(Замените USERNAME и PASSWORD вашими учетными данными.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Вы можете заменить 1.2.3.4 своим IP.Вы можете многократно выполнить указанную выше команду для получения доступа GRANT с нескольких IP-адресов.

Вы также можете указать отдельный USERNAME & PASSWORD для удаленного доступа.

Вы можете проверить окончательный результат с помощью:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Наконец, вам также может потребоваться выполнить:

mysql> FLUSH PRIVILEGES;

Тестовое соединение

Из терминала / командной строки:

mysql -h HOST -u USERNAME -pPASSWORD

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

Бонус-совет: отозвать доступ

Если вы случайно предоставили доступ пользователю, лучше использовать опцию отзыва.

После этого будут отменены все параметры для USERNAME со всех компьютеров:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

Если после запуска команды REVOKE вы увидите привилегию USAGE, это нормально.Это так же хорошо, как и никаких привилегий.Я не уверен, что это можно отозвать.

37 голосов
/ 20 мая 2013

Предполагая, что вышеуказанный шаг завершен и порт MySql 3306 доступен для удаленного доступа; Не забудьте привязать публичный IP-адрес в файле конфигурации mysql.

Например, на моем сервере Ubuntu:

#nano /etc/mysql/my.cnf

В файле найдите блок сечения [mysqld] и добавьте новый адрес привязки, в данном примере это 192.168.0.116. Это будет выглядеть примерно так

......    
.....    
# 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    
bind-address        = 192.168.0.116

.....    
......

при желании вы можете удалить привязку localhost (127.0.0.1), но затем вам необходимо указать IP-адрес для доступа к серверу на локальной машине.

Тогда последний шаг - перезапустить сервер MySql. (в убунту)

stop mysql

start mysql

или #/etc/init.d/mysql restart для других систем

Теперь к базе данных MySQL можно получить удаленный доступ:

mysql -u username -h 192.168.0.116 -p
24 голосов
/ 21 марта 2015

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

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Как уже отмечалось, % является подстановочным знаком, и это позволит любому IP-адресу подключатьсяв вашу базу данных.Я предполагаю, что при подключении у вас будет пользователь с именем root (хотя это значение по умолчанию).Введите пароль пользователя root, и все готово.Обратите внимание, что у меня нет одинарных кавычек (') вокруг пользователя root.

21 голосов
/ 08 мая 2016

Изменения файла конфигурации необходимы для подключения через локальный хост.

Чтобы подключиться через удаленные IP-адреса, войдите в систему как «пользователь root» и выполните следующие запросы в mysql.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

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

Также прокомментируйте строку ниже из вашего файла my.cnf, расположенного в /etc/mysql/my.cnf

bind-address = 127.0.0.1

Перезапустите MySQL, используя

sudo service mysql restart

Теперь вы должны иметь возможность удаленно подключиться к своему MySQL.

19 голосов
/ 23 ноября 2017

Используйте эту команду:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Затем:

FLUSH PRIVILEGES; 

Затем закомментируйте следующую строку в файле "/etc/mysql/mysql.conf.d/mysqld.cnf"(обязательно!):

bind-address = 127.0.0.1 

У меня работает!

17 голосов
/ 15 января 2016

Запустите следующее:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Затем попытайтесь установить соединение с указанного вами IP-адреса:

mysql -h address-of-remove-server -u root -p   

Вы должны быть в состоянии подключиться.

15 голосов
/ 08 февраля 2017

Вы можете решить проблему MariaDB с помощью этой команды :

Примечание:

GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';

% является подстановочным знаком.В этом случае это относится ко всем IP-адресам.

8 голосов
/ 07 октября 2014
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
5 голосов
/ 10 апреля 2019

Для удаленного доступа к базе данных Mysql server 8:

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...