Я пытаюсь подключиться к удаленной базе данных 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 с помощью следующих пяти простых шагов:
Остановите процесс сервера 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:
# /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> ПРИВИЛЕГИИ ПРОМЫВКИ;
гранты на все IP
К сожалению, разрешения mysql различаются по хосту и ip. Разрешения, предоставленные для имени хоста, не работают для IP-адреса и наоборот.
Убедитесь, что вы предоставили разрешения для пользователя и IP-адреса хоста / имени хоста, с которого вы подключаетесь.