Рубріки: HighloadТеория

Mysql 1045 access denied for user

Игорь Грегорченко

При подключении к MySQL, ERROR 1045 (28000): Access denied for user означает неверную комбинацию имени пользователя и/или хоста и/или пароля. Причин возникновения несколько.

Localhost и 127.0.0.1

Если вы уверены, что введенная комбинация пользователь/пароль верна, то следующим шагом будет проверка адреса. Localhost соответствует IP-адресу 127.0.0.1, а пользователи ‘user’@’127.0.0.1’ и ‘user’@’localhost’ взаимозаменяемы. Вот только для каждого из них можно задать отдельный пароль, а при входе будет выбираться пользователь, который находится выше в таблице mysql.user.

Не указан хост в явном виде

Возможно при создании пользователя не был указан хост:

CREATE USER 'user' IDENTIFIED BY 'pass'

Проблема также может появиться при выдаче прав GRANT ALL

В этом случае будет создан пользователь ‘user’@’%’, а при попытке подключения локально появится ошибка, так как пользователя ‘user’@’localhost’ не существует.

Использование кавычек

Еще одна неявная причина ошибки — неправильное использование кавычек:

CREATE USER 'user@localhost' IDENTIFIED BY 'somepass'

Будет создан пользователь ‘user@localhost’@’%’

Анонимный (пустой) пользователь

Наличие “пустого” пользователя ”@’localhost’ или ”@’127.0.0.1′ – самая неочевидная причина проблемы. При подключении к БД, сервер в первую очередь проверяет пользователей с явно указанными IP-адресом или localhost-ом, проверяя по таблице mysql.user. То есть, система попробует подключить пользователя ‘user’@’localhost’, проверяя пользователя ”@’localhost’. В этом случае и появится ошибка 1045: Access denied for user. Лучшим решением проблемы будет удаление анонимного юзера:

shell> mysql -u root -p
Enter password: (enter root password here)
mysql> DROP USER ''@'localhost';
mysql> DROP USER ''@'host_name';

Не забудьте указать свой хост

Пароль утерян

Если же ошибок нет и вы уверены, что имя пользователя верное, тогда единственное решение – смена пароля:

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('new_password')
-> WHERE User = 'user';
mysql> FLUSH PRIVILEGES;

Подключение под суперпользователем, обновление таблицы mysql.user

Если же утерян пароль суперпользователя, то нужно выполнить следующее:

# Остановка сервера MySQL
/etc/init.d/mysqld stop

# Перезапуск, пропускает таблицу привилегий
mysqld_safe --skip-grant-tables

# Запуск нового клиента (в новом терминале)
mysql -u root

# Сброс пароля
UPDATE mysql.user SET authentication_string=PASSWORD('password') WHERE User='root';
FLUSH PRIVILEGES;

Установка нового root-пароля и обновление привилегий

Самое главное

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

Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023