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, выполнив пять простых шагов:
Остановите процесс сервера MySQL.
Запустите процесс сервер / демон MySQL (mysqld) с параметром --skip-grant-tables, чтобы он не запрашивал пароль.
Подключитесь к серверу mysql от имени пользователя root.
Установите новый пароль учетной записи root mysql, т.е. сбросьте пароль mysql.
Выйдите и перезапустите сервер MySQL.
Специальные команды: (войдите как пользователь root):
Остановить службу MySQL
# /etc/init.d/mysql stop
Выход:
Stopping MySQL database server: mysqld.
Запустите сервер MySQL без пароля:
использовать mysqld_safe:
mysqld_safe --skip-grant-tables &
Выход:
[1] 5988 Starting mysqld daemon with databases from /var/lib/mysql mysqld_safe[6025]: started
Подключитесь к серверу 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>
Установите новый пароль пользователя root для MySQL
mysql> use mysql; mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root'; mysql> flush privileges; mysql> quit
Остановите 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
Запустите сервер MySQL и протестируйте его:
# /etc/init.d/mysql start # mysql -u root -p
Возможно, вам нужно предоставить привилегии для этого IP, например:
mysql> ПРЕДОСТАВЛЯЕТ ВСЕ ПРИВИЛЕГИИ на dbname.* root@'%'; mysql> FLUSH PRIVILEGES;
гранты для всех IP
К сожалению разрешения mysql различаются по хосту и ip. Разрешения, предоставленные для имени хоста, не работают для IP и наоборот.
Убедитесь, что вы предоставляете разрешения для пользователя и имени хоста ip/host, к которому вы подключаетесь.