Mysql - доступ запрещен для пользователя 'root'@'xxxx'

Я пытаюсь подключиться к удаленной базе данных MySQL из моего локального ящика. Первоначально я даже не мог ударить MySQL БД. Но после комментирования binding_address в файле my.cnf и перезапуска сервера MySQL, я теперь могу поразить его.

Но сейчас я получаю сообщение об ошибке "Отказано в доступе"

mysql -u root -h x.x.x.x -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'x.x.x.x' (using password: YES)

Мой IP занесен в черный список? Я могу изменить это, так как у меня есть права администратора на удаленной машине. Кто-нибудь, помогите мне.

6 ответов

Решение

Дважды проверьте, чтобы убедиться, что root имеет доступ с хостов /IP-адресов, кроме localhost.

mysql> use mysql;
mysql> ВЫБЕРИТЕ хост ОТ пользователя, ГДЕ user = 'root';

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

mysql> GRANT SELECT, INSERT ON mydatabase. * TO 'root'@'10.0.0.1';

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

Первый заказ бизнеса входит с полными разрешениями. Если вы не можете добавить эту строку в my.cnf и перезапустите mysql:

skip-grant-tables

Я рекомендую сделать небольшое исследование, чтобы увидеть, какие пользователи у вас есть:

SELECT user,host,password FROM mysql.user WHERE user = 'root' ORDER BY host ASC;

Это отобразит ваш список пользователей, что-то вроде:

mysql> SELECT user,host,password FROM mysql.user WHERE user = 'root' ORDER BY host ASC;
+------+------------+-------------------------------------------+
| user | host       | password                                  |
+------+------------+-------------------------------------------+
| root | 127.0.0.1  |                                           |
| root | ::1        |                                           |
| root | localhost  | *E0AD777475E6713F9B04317EE38888D61042DAC1 |
| root | randym-mbp |                                           |
+------+------------+-------------------------------------------+
4 rows in set (0.01 sec)

Вам нужно увидеть localhost в списке. Если нет, добавьте это так:

GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

В противном случае просто обновите пароль следующим образом:

SET PASSWORD FOR root@'localhost' = PASSWORD('your_password');
FLUSH PRIVILEGES;

Затем удалите skip-grant-tables из вашего my.cnf и перезапустите mysql.

Пароли в mysql настроены на IP. Обычно они устанавливаются только для доступа через локальный хост, особенно для пользователя root. Убедитесь, что есть root@% настройка входа в вашей таблице разрешений.

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

Для Unix-подобных систем для сброса пароля root мне помогло следующее решение: http://www.cyberciti.biz/tips/recover-mysql-root-password.html

тэк:

Восстановите пароль сервера базы данных MySQL, выполнив пять простых шагов:

  1. Остановите процесс сервера MySQL.

  2. Запустите процесс сервер / демон MySQL (mysqld) с параметром --skip-grant-tables, чтобы он не запрашивал пароль.

  3. Подключитесь к серверу mysql от имени пользователя root.

  4. Установите новый пароль учетной записи root mysql, т.е. сбросьте пароль mysql.

  5. Выйдите и перезапустите сервер MySQL.

Специальные команды: (войдите как пользователь root):

  1. Остановить службу MySQL

    # /etc/init.d/mysql stop
    

    Выход:

    Stopping MySQL database server: mysqld.
    
  2. Запустите сервер MySQL без пароля:

    использовать mysqld_safe:

    mysqld_safe --skip-grant-tables &
    

    Выход:

    [1] 5988
    Starting mysqld daemon with databases from /var/lib/mysql
    mysqld_safe[6025]: started
    
  3. Подключитесь к серверу MySQL с помощью клиента MySQL:

    # mysql -u root
    

    Выход:

    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql>
    
  4. Установите новый пароль пользователя root для MySQL

    mysql> use mysql;
    mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
    mysql> flush privileges;
    mysql> quit
    
  5. Остановите MySQL Server:

    # /etc/init.d/mysql stop
    

    Выход:

    Stopping MySQL database server: mysqld
    STOPPING server from pid file /var/run/mysqld/mysqld.pid
    mysqld_safe[6186]: ended
    [1]+  Done                    mysqld_safe --skip-grant-tables
    
  6. Запустите сервер MySQL и протестируйте его:

    # /etc/init.d/mysql start
    # mysql -u root -p
    

Возможно, вам нужно предоставить привилегии для этого IP, например:

mysql> ПРЕДОСТАВЛЯЕТ ВСЕ ПРИВИЛЕГИИ на dbname.* root@'%'; mysql> FLUSH PRIVILEGES;

гранты для всех IP

К сожалению разрешения mysql различаются по хосту и ip. Разрешения, предоставленные для имени хоста, не работают для IP и наоборот.

Убедитесь, что вы предоставляете разрешения для пользователя и имени хоста ip/host, к которому вы подключаетесь.

Другие вопросы по тегам