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

282

Я в курсе этой команды:

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

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

штольня
источник
1
Прежде чем сделать это, рассмотрим последствия для безопасности
e18r
7
не каждая система является производственной системой. некоторые люди нуждаются в этом для развития.
Конрад Джонс

Ответы:

275
TO 'user'@'%'

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

Ariel
источник
@kristopolous Есть много вещей, которые могут вызвать это. Эта команда о удаленном доступе (две разные машины). Если это не то, что вы делаете, это неправильная команда. Вам все еще нужен правильный пароль и другие вещи.
Ариэль
11
Вы должны использовать «сбросить привилегии»; чтобы изменения вступили в силу
Дидье Сампаоло
Хитрость при подключении к экземпляру db, работающему на том же экземпляре ОС (например, на вашей машине разработки), заключается в передаче -h my_machine_nameпараметра. Это обманывает клиента, чтобы идентифицировать вас как 'user'@my_machine_name.example.com, а не 'user'@localhost. Таким образом, вам не нужно создавать и поддерживать двойные учетные записи и гранты для localhostдоступа к сети и для обоих . И, конечно же , быть уверен mysqldсвязан 0.0.0.0против 127.0.0.1.
Чарли
173

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

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

Изменить конфиг mysql

Начните с редактирования файла конфигурации mysql

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, это нормально. Это так же хорошо, как и никаких привилегий. Я не уверен, что это можно отозвать.

Сиддхарт Кумар
источник
7
Обратите внимание, что мне пришлось изменить /etc/mysql/mysql.conf.d/mysqld.cnfфайл, а не /etc/mysql/my.cnfзакомментировать bind-addressчасть. #skip-networkingЛиния отсутствует , и не должна быть никакого эффекта добавления и комментирования линии.
Паван
1
На MariaDB 10.1.26 файл конфигурации/etc/mysql/mariadb.conf.d/50-server.cnf
Квадз
Если вы выполнили все вышеперечисленное и по-прежнему не можете подключиться, проверьте настройки брандмауэра, возможно, вы блокируете порт 3306или какой-либо другой порт, который вы установили
avn
37

Предполагая, что вышеуказанный шаг завершен, и порт 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 (в Ubuntu).

stop mysql

start mysql

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

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

mysql -u username -h 192.168.0.116 -p
Waqas
источник
/etc/init.d/mysql reloadдолжно хватить
Лоренц Ло Зауэр
Я просто сделал это и не смог подключиться к серверу mysql удаленно. Затем я попытался закомментировать адреса привязки, и это сработало. Я также попытался войти на сервер с помощью mysql -u <user> -p без указания хоста, и это сработало, поэтому кажется, что «вы можете удалить привязку localhost (127.0.0.1), если хотите, но тогда вам нужно специально дать IP-адрес для доступа к серверу на локальной машине. " не является правильным. (Ubuntu 12.04 LTS server mysql Ver 14.14 Distrib 5.5.34)
Программист
5
bind-addressДиректива определяет IP - адрес , который MySQL сервер прослушивает; не IP-адреса, с которых сервер принимает соединения.
GoZoner
1
После каждого шага это не работает. Я получаю сообщение об ошибке при комментировании bind-addressадреса localhost или remotehost. mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
baermathias
Можно ли указать адрес как abc.abc:1234 вместо 192.168.0.116?
Бьелас
26

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

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

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

Dev
источник
Почему важно удалять одинарные кавычки у пользователя? Почему это отличается от других ответов (и руководства)?
DMCoding
26

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

Чтобы подключиться через удаленные 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.

harishannam
источник
2
Это не отвечает на вопрос.
Чаррис
1
@ChristopheHarris почему ты так чувствуешь? Ответ ясно дает пошаговую инструкцию о том, как создать нового пользователя в MySQL, который позволяет как локальному, так и удаленному доступу к БД использовать этого пользователя. Вы можете объяснить, plesae?
Харишаннам
1
Не работает для меня Все еще есть та же ошибка. Неважно, пробую ли я с правами root или с новым пользователем: Не удается подключиться к серверу MySQL по адресу «xxx.xxx.xxx.xxx» ([Errno 61] Отказано в соединении)
baermathias
21

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

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

Затем:

FLUSH PRIVILEGES; 

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

bind-address = 127.0.0.1 

Работает для меня!

Томаш Чеховский
источник
Очень хороший Важное пособие. Если нет, то много ошибок для таких запросов, какyour-password-does-not-satisfy-the-current-policy-requirements
Алехандро Тейшейра Муньос
21

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

Разрешить MySQL серверу принимать удаленные подключения. Для этого откройте файл mysqld.conf:

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

Найдите строку, начинающуюся с «bind-address», и установите для нее значение 0.0.0.0.

bind-address                    = 0.0.0.0

и, наконец, сохранить файл.

Примечание: если вы работаете с MySQL 8+, bind-addressдиректива не будет в mysqld.cnfфайле по умолчанию. В этом случае добавьте директиву внизу файла /etc/mysql/mysql.conf.d/mysqld.cnf.

Теперь перезапустите сервер mysql с помощью systemdили используйте более старую serviceкоманду. Это зависит от вашей операционной системы:

sudo systemctl restart mysql # for ubuntu    
sudo systemctl restart mysqld.service # for debian

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

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

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

mysql -u root -p

Теперь создайте нужного пользователя в подстановочных знаках localhost и '%' и предоставьте разрешения для всех БД как таковых.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

Затем,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

И, наконец, не забудьте сбросить привилегии

FLUSH PRIVILEGES;

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

Надеюсь это поможет ;)

Имтиаз Шакил Сиддик
источник
2
Перезапуск sudo systemctl mysqld.service для Debian, мне пришлось использовать перезапуск sudo systemctl mysql.service для Ubuntu
ani0904071
Я обновил свой ответ и добавил команду mysql restart для обоих дистрибутивов. спасибо @ ani0904071
Имтиаз Шакил Сиддик
17

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

$ 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   

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

akhil.ov
источник
15

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

Примечание:

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

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

未来 陆家嘴 顶尖 的 投资 人
источник
3
в mysql вам нужно (1) .change my.cnf content (2) .grant удаленный пользователь (3) взаимодействовать с брандмауэром для прослушивания порта 3306.
Feb 3家嘴 顶尖 的 投资 人
Ты спас мой день. Ценить это!
Алметт
8
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
user3846464
источник
7

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

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

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

FLUSH PRIVILEGES;
Анил Рана
источник
5
  • НАЧАТЬ MYSQL с помощью администратора
    • mysql -u admin-user -p (ВВЕДИТЕ ПАРОЛЬ НА ЗАПРОС)
  • Создать нового пользователя:
    • СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'newuser' @ '%' ИДЕНТИФИЦИРОВАНО ПО 'паролю'; (% -> любой хост)
  • Предоставить привилегии:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON db_name. * TO 'newuser' @ '%';
    • ПРИВИЛЕГИИ ПРОМЫВКИ;

Если вы используете экземпляр EC2, не забудьте добавить входящие правила в группу безопасности с помощью MYSQL / Aurura.

Мох. С
источник
5

Редактировать файл:

/etc/mysql/percona-server.cnf

Добавьте приведенный ниже код в файл.

[mysqld] bind-address = 0.0.0.0

Создать пользователя для удаленного доступа.

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

Все Linux-сервер работает,

Для MSWin c: \ Найти место инсаталяции \ путь к файлу

Tejas Tank
источник
[mysqld] нужно добавить в файл, иначе он не будет работать должным образом
Tejas Tank
3

Просто создайте пользователя для некоторой базы данных, например

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

Затем перейдите к

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfи измените строку bind-address = 127.0.0.1наbind-address = 0.0.0.0

После этого вы можете подключиться к этой базе данных с любого IP.

Диого Мендес
источник
3

Откройте mysql consoleи выполните следующую команду (введите имя базы данных, имя пользователя и пароль):

Предоставить все на имя вашей базы данных. * Для admin @ '%', идентифицированного как 'yourRootPassword';

Затем выполните:

ПРИВИЛЕГИИ ПРОМЫВКИ;

Откройте командную строку и откройте файл, /etc/mysql/mysql.conf.d/mysqld.cnfиспользуя любой редактор с root privileges.

Например:

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

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

bind-address = 127.0.0.1

Перезапустите mysql, чтобы отразить изменения, используя команду:

sudo service mysql restart

Наслаждаться ;)

Усман Юсаф
источник
2

Вам нужно изменить конфигурационный файл mysql:

Начните с редактирования файла конфигурации mysql

vim /etc/mysql/my.cnf

Добавить:

bind-address = 0.0.0.0
бхушан парди
источник
0

На панелях веб-сайтов, таких как cPanel, вы можете добавить один %(знак процента) в разрешенные имена хостов для доступа к вашей базе данных MySQL.

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

Мухаммед Сакиб
источник
пожалуйста, не обращайтесь к таким вещам, как cPanel, когда представлен прямой запрос, это никогда не будет показывать работающий результат для кого-либо еще
Тобиас Хагенбек
@TobiasHagenbeek Спасибо за ваш отзыв. Этот метод / трюк не придуман мной (это распространено в интернете). Но я один из тестеров этого метода, и я обнаружил, что это самый простой и рабочий метод, поэтому я разместил его здесь. Я знаю, что в этом методе есть некоторые угрозы безопасности, которыми можно пренебречь.
Мухаммед Сакиб
0

Например, в моем CentOS

sudo gedit /etc/mysql/my.cnf

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

# bind-address = 127.0.0.1

затем

sudo service mysqld restart

zawhtut
источник
0

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

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;
Atul6.Singh
источник
0

то, что работало в Ubuntu, так это предоставление всех привилегий пользователю:

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

и установить адрес привязки в /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

затем перезапустить демон MySQL:

service mysql restart
Мигель Мота
источник
-7

Вы можете отключить всю безопасность, отредактировав /etc/my.cnf:

skip-grant-tables
Даниал Шахид Али
источник
это удаляет все требования к паролю
kristopolous
5
Обратите внимание, что не рекомендуется включать эту опцию в производственной среде, поскольку это позволяет любому подключаться без пароля!
AStopher
однако, это идеально для среды разработки
DMCoding
Это позволяет людям взломать вашу базу данных без использования пароля.
MilkyWay90
@DanielJames, даже для среды разработки, это ужасная идея
Dragas