Mysql добавляет пользователя для удаленного доступа

Я создал пользователя user@'%' с password 'password. Но не могу подключиться к:

mysql_connect('localhost:3306', 'user', 'password');

Когда я создал пользователя user@'localhost', я смог подключиться. Почему? Разве "%" не означает от ЛЮБОГО хоста?


person user2333586    schedule 29.04.2013    source источник
comment
Обратите внимание, что пароль для user @ localhost и user @% в целом различается, как и привилегии.   -  person Jose Manuel Gomez Alvarez    schedule 22.09.2019


Ответы (4)


Для удаленного подключения MySQL должен привязать порт 3306 к IP-адресу вашего компьютера в my.cnf. Затем вы должны создать пользователя как в localhost, так и в подстановочном знаке '%' и предоставить разрешения для всех БД как таковых . См. Ниже:

my.cnf (my.ini в Windows)

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

тогда

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;

В зависимости от вашей ОС вам может потребоваться открыть порт 3306, чтобы разрешить удаленные подключения.

person apesa    schedule 29.04.2013
comment
Это помогло мне использовать частный экземпляр MySQL WebFaction. Я выполнил ваши шаги CREATE USER и GRANT ALL, установил mysql.default_port = <private instance port> в моем php.ini, а затем использовал 127.0.0.1 для моего имени хоста db - person spex; 11.09.2013
comment
Очень полезный. Просто комментарий. my.cnf может включать другой файл конфигурации, поэтому соответствующая строка может быть где-то еще. В my.cnf найдите строку, начинающуюся с! Include, если адрес привязки отсутствует в my.cnf, он может находиться в этом включенном файле. - person tru7; 05.02.2017
comment
Где находится файл my.cnf? - person Vladimir Despotovic; 18.10.2017
comment
Какую версию MySQL вы используете и на какой платформе? Linux, Windows ?? - person apesa; 18.10.2017
comment
@VladimirDespotovic на linux посмотрите в '/ etc / mysql', хотя это также может быть файл mysql.cnf. См. Также инструкции MSS. - person leopold; 09.01.2018
comment
не забудьте СМЫВАТЬ ПРИВИЛЕГИИ;) - person volkovmqx; 27.06.2018
comment
Также проверьте расположение /etc/mysql/my.cnf или /etc/mysql/mysql.conf.d/mysqld.cnf для изменения bind-address = 0.0 .0,0 - person Vishnu S. Divetia; 12.09.2018
comment
Почему и localhost, и%? - person nights; 05.12.2019
comment
@nights localhost не требуется для удаленного доступа. - person stackprotector; 15.07.2020
comment
@ VishnuS.Divetia 0.0.0.0 не является обязательным. Достаточно IP-адреса интерфейса, через который будет происходить удаленный доступ. - person stackprotector; 15.07.2020
comment
@volkovmqx FLUSH PRIVILEGES; не требуется при создании пользователя, только на INSERT, DELETE или UPDATE в БД пользователя или БД привилегий. - person stackprotector; 15.07.2020
comment
Это необходимо делать на стороне сервера, хотя это кажется очевидным после нескольких часов борьбы. - person PJ127; 22.09.2020
comment
У этого решения есть недостаток. Существующие пользователи, обращающиеся к системе с host = localhost, перестанут работать. - person Shahid Karimi; 11.10.2020
comment
@ShahidKarimi ты знаешь, как это исправить? - person Utku Dalmaz; 15.03.2021

Следуйте инструкциям (шаги с 1 по 3 в Windows не требуются):

  1. Найдите конфигурацию mysql для редактирования:

/etc/mysql/my.cnf (Mysql 5.5)

/etc/mysql/conf.d/mysql.cnf (Mysql 5.6+)

  1. Найдите bind-address=127.0.0.1 в файле конфигурации bind-address=0.0.0.0 (вы можете установить адрес привязки для одного из IP-адресов вашего интерфейса или, как я, использовать 0.0.0.0)

  2. Перезапустите службу mysql, запущенную на консоли: service mysql restart

  3. Создайте пользователя с безопасным паролем для удаленного подключения. Для этого выполните следующую команду в mysql (если вы являетесь пользователем linux для доступа к консоли mysql, запустите mysql и если вы установили пароль для root-запуска mysql -p):

    ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА . 'remote' @ '%', ОПРЕДЕЛЕННОМ 'safe_password' С ОПЦИЕЙ GRANT;

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

person MSS    schedule 20.05.2016
comment
изменить адрес привязки = 0.0.0.0 ... это сработало для меня. и предоставить привилегии - person zwitterion; 11.08.2016
comment
разрешение привязки адреса глобально приведет к серьезным проблемам с безопасностью. вместо этого мы можем добавить конкретный IP-адрес или диапазон адресов. - person guru rajender; 04.12.2020
comment
третий шаг должен быть: перезапуск службы mysql - person quanly_mc; 10.06.2021
comment
@ quanly-mc ты прав, я просто исправлю. Благодарность - person MSS; 20.06.2021

для какой БД находится пользователь? посмотри на этот пример

mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Итак, возвращаясь к вашему вопросу, оператор "%" означает все компьютеры в вашей сети.

как показывает aspesa, я также уверен, что вам нужно создать или обновить пользователя. ищите всех своих пользователей mysql:

SELECT user,password,host FROM user;

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

mysql -h localhost -u gmeier -p

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

person caramba    schedule 29.04.2013
comment
в общем, для всех дб. Я просто хочу подключиться, а не выбирать БД. codemysql_connect ('localhost: 3306', 'пользователь', 'пароль'); code - person user2333586; 30.04.2013
comment
какая у вас ОС, Windows, Linux ?? - person apesa; 30.04.2013
comment
Вам нужно будет убедиться, что ваш IP-адрес привязан к порту 3306. В Windows вы можете использовать netstat -n, чтобы узнать, какие порты привязаны к вашему IP. Если вы видите 127.0.0.1:3306, вы не сможете подключиться ни с чего, кроме localhost - person apesa; 30.04.2013

Альтернативный способ - использовать MySql Workbench. Перейдите в раздел «Администрирование» - ›Пользователи и права -› и измените «localhost» на «%» в атрибуте «Ограничить сопоставление с хостом» (с хоста) для пользователей, которым вы не хотите предоставлять удаленный доступ. Или создайте нового пользователя (кнопка «Добавить учетную запись») с помощью « % 'в этом атрибуте вместо localhost.

person Ven    schedule 05.01.2021