MySQL и MariaDB LinuxWindowsmacOS

MySQL: ERROR 1045 (28000) Access denied for user

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

Краткий ответ

Проверьте пароль, хост пользователя и привилегии.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Проверка пользователя и хоста
  5. Плагин аутентификации и пароль
  6. Права на базу

#Что означает ошибка

Сообщение
Access denied for user

Ошибка ERROR 1045 (28000): Access denied for user сообщает, что MySQL отклонил попытку входа. Это решение принимает сам сервер: он проверяет сочетание «пользователь + хост, с которого идёт подключение + пароль». Учётные записи в MySQL привязаны к хосту, поэтому root@localhost и root@% — это разные пользователи с разными паролями.

Слова «using password: YES» говорят, что пароль передавался, но не подошёл; «using password: NO» — что пароль не был передан вовсе (например, он не прописан в конфиге приложения). Эта деталь сразу показывает, где искать ошибку.

Проверьте пароль, хост пользователя и привилегии.

#Причины и решения

Возможная причинаКак узнатьЧто делать
ПарольНеверный.Проявляется как «Access denied for user» или близкий по смыслу сбой.Смените.
Хостlocalhost.Проявляется как «Access denied for user» или близкий по смыслу сбой.%.
ПраваGRANT.Проявляется как «Access denied for user» или близкий по смыслу сбой.Выдайте.
Плагинauth.Проявляется как «Access denied for user» или близкий по смыслу сбой.Измените.

#Пошаговое решение

  1. Проверьте, что именно отклоненоСохраните полную строку ошибки Access denied for user 'имя'@'хост' (using password: YES/NO) из клиента и определите, какой адрес/учётная запись реально отклонены. В MySQL пользователи app@localhost и app@% — разные учётные записи; не меняйте пароль root, если ошибка у приложения.
  2. Проверьте учётную записьАдминистратор MySQL входит через предусмотренный способ (sudo mysql на некоторых локальных установках или защищённая административная учётная запись) и выполняет SELECT user,host,plugin FROM mysql.user WHERE user="app";, подставив имя. Проверьте, не отсутствует ли запись для нужного хоста и не устарел ли метод аутентификации.
  3. Задайте пароль и праваЕсли требуется отдельная учётная запись приложения, создайте её с надёжным уникальным паролем через CREATE USER и предоставьте только необходимые права на конкретную базу (GRANT SELECT,INSERT,UPDATE,DELETE ... или нужные проекту права), после согласования. Не назначайте GRANT ALL по шаблону на весь сервер; если аккаунт уже есть, не меняйте ему пароль без синхронного обновления приложения.
  4. Проверьте подключение из приложенияВ конфигурации приложения проверьте хост (localhost часто означает сокет, 127.0.0.1 — TCP), имя БД и пользователя. Выполните безопасный mysql -h фактический_хост -u фактический_пользователь -p -e "SELECT 1", затем повторите запрос приложения. Не оставляйте пароль в истории команд или в общедоступном PHP-файле.
  5. Если забыт пароль rootЕсли утерян административный пароль MySQL, используйте официальную процедуру восстановления для конкретной версии и платформы только через консоль с гарантированной изоляцией. Не запускайте --skip-grant-tables на доступной из сети БД и не переключайте всех пользователей на устаревший mysql_native_password: в MySQL 8.4 он отключён по умолчанию, а в 9.0 удалён.

#Проверка пользователя и хоста

Зайдите под администратором и выполните SELECT user, host, plugin FROM mysql.user. Убедитесь, что запись для нужного пользователя существует и что хост совпадает с тем, откуда подключается клиент (localhost, 127.0.0.1, IP или %). Подключение к localhost по сокету и к 127.0.0.1 по TCP обрабатываются как разные хосты.

#Плагин аутентификации и пароль

В MySQL 8 по умолчанию используется caching_sha2_password, а старые клиенты и драйверы PHP его не понимают. Если приложению нужен mysql_native_password, измените способ входа для пользователя. Для сброса забытого пароля root запустите сервер с пропуском таблиц привилегий, задайте новый пароль и перезапустите сервер в обычном режиме.

#Права на базу

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

SQLС осторожностьюПрава администратора
Создание отдельного пользователя для приложения с правами на одну базу.
SELECT user,host,plugin FROM mysql.user WHERE user='app';
-- Создание и GRANT выполняйте только после определения реального аккаунта и минимально необходимых прав.

Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

SQLКомандаПрава администратора
Список пользователей, хостов и плагинов аутентификации.
SELECT user, host, plugin FROM mysql.user;

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.