Mysql додає користувача для віддаленого доступу


148

Я створив користувача user@'%'з password 'password. Але я не можу зв’язатися з:

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

Коли я створив користувача user@'localhost', я зміг підключитися. Чому? Чи не означає "%" від БУДЬ-якого господаря?


Зауважте, що пароль для користувача @ localhost та user @% взагалі різний, як і привілеї.
Жозе Мануель Гомес Альварес

Відповіді:


378

Для віддаленого підключення вам потрібно мати порт MySQL, який прив'язує 3306 до IP-адреси вашого комп'ютера в my.cnf. Тоді ви повинні створити користувача як у localhost, так і у%% wildcard та надавати дозволи на всі БД як такі . Дивись нижче:

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, щоб дозволити віддалені з'єднання.


1
Це допомогло мені використовувати приватний екземпляр MySQL WebFaction. Я дотримувався ваших дій CREATE USER і GRANT ALL, встановлених mysql.default_port = <private instance port>у моєму php.ini, а потім використовувався 127.0.0.1для мого імені хоста db
spex

Дуже корисний. Просто коментар. my.cnf може включати інший файл конфігурації, тому відповідний рядок може бути десь іншим. У my.cnf шукайте рядок, що починається з! Include, якщо bind-адреса відсутня у my.cnf, вона може бути розміщена у включеному файлі.
tru7


7
не забувайте
ПРИБІГАТИ ПРИВІЛЕГ

4
Чому як localhost та%?
ночі

21

Дотримуйтесь інструкцій (кроки 1–3 не потрібні у Windows):

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

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

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

  2. Знайдіть bind-address=127.0.0.1у конфігураційній зміні файлу bind-address=0.0.0.0(ви можете встановити прив'язку адреси до одного з ips інтерфейсу або як я використовую 0,0.0.0)

  3. Перезапустіть службу mysql, запущену на консолі: service restart mysql

  4. Створіть користувача з безпечним паролем для віддаленого з'єднання. Для цього виконайте наступну команду в mysql (якщо ви користуєтесь Linux, щоб досягти запуску консолі mysql mysqlі якщо ви встановили пароль для запуску root mysql -p):

    GRANT ALL PRIVILEGES 
     ON *.* TO 'remote'@'%' 
     IDENTIFIED BY 'safe_password' 
     WITH GRANT OPTION;`
    

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


2
змінити bind-address = 0.0.0.0 ... що працювало на мене. та надайте пільги
zwitterion

12

для якої БД користувач? подивіться на цей приклад

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)

тож для повернення до вас питання оператор "%" означає всі комп'ютери у вашій мережі.

як-от аспекти показує, що я також впевнений, що вам потрібно створити або оновити користувача. шукайте всіх ваших користувачів mysql:

SELECT user,password,host FROM user;

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

mysql -h localhost -u gmeier -p

сподіваюся, що це допомагає


загалом, для всіх db. Я просто хочу підключитися, а не вибирати БД. codemysql_connect ('localhost: 3306', 'user', 'password'); code
user2333586

на якій ОС ви працюєте, Windows, Linux ??
apesa

вікна. сервер wamp.
user2333586

Вам потрібно буде переконатися, що ваша IP-адреса прив’язана до порту 3306. У Windows ви можете використовувати netstat -n, щоб побачити, які порти прив’язані до вашого IP-адреси. Якщо ви побачите 127.0.0.1:3306, ви не зможете підключитися ні до чого іншого, крім localhost
apesa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.