Назад | Перейти на главную страницу

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

Я пытаюсь подключиться к удаленной базе данных mysql из своего локального ящика. Изначально я даже не мог попасть в mysql db. Но после того, как я прокомментировал 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 занесен в черный список или что-то в этом роде? Я могу это изменить, поскольку у меня есть права администратора на удаленном компьютере. Кто-нибудь, помогите мне.

Первый заказ бизнеса - получение полных разрешений. Если вы не можете, добавьте эту строку в свой 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.

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

mysql> используйте mysql;
mysql> ВЫБРАТЬ хост ОТ пользователя WHERE user = 'root';

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

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

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

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

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

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

Jist:

Восстановите пароль сервера базы данных 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:

    # /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> ПРИВИЛЕГИИ ПРОМЫВКИ;

гранты на все IP

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

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