MySQL и MariaDB MySQLMariaDB 1045ERROR 104528000

MySQL: ошибка 1045 «Access denied for user» — причины и решение

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

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

ERROR 1045 (28000): Access denied for user значит, что сервер MySQL отклонил вход: неверный пароль, пользователь не существует для этого хоста, у него нет прав или используется неподходящий плагин аутентификации. Обратите внимание на фрагмент @'хост' и на using password: YES/NO в сообщении — они показывают, что именно проверял сервер.

В этой статье
  1. Расшифровка
  2. Что проверить сначала
  3. Пошаговое решение для новичка
  4. Способ 1. Войдите администратором и посмотрите учётные записи
  5. Способ 2. Создайте пользователя или задайте пароль
  6. Способ 3. Проверьте плагин аутентификации
  7. Способ 4. Проверьте конфигурацию приложения
  8. Как проверить результат

#Расшифровка

1045 · SQLSTATE 28000
ERROR 1045 (28000): Access denied for user 'app'@'localhost' (using password: YES)
По-русскиОшибка 1045: доступ запрещён для пользователя 'app'@'localhost' (пароль использовался: да).

В MySQL учётная запись — это пара «имя + хост», например 'app'@'localhost'. Пользователи 'app'@'localhost' и 'app'@'%' — разные записи с разными паролями и правами. Поэтому ошибка зависит и от того, откуда вы подключаетесь.

#Что проверить сначала

  • Хост в сообщении: подключение идёт с localhost, 127.0.0.1 или внешнего адреса? Для сокета и TCP применяются разные записи.
  • using password: NO — пароль не был передан (пустой в конфиге приложения).
  • using password: YES — пароль передан, но не подошёл или нет записи для этого хоста.

#Пошаговое решение для новичка

  1. Определите, какой пользователь подключаетсяВ сообщении ERROR 1045 (28000) найдите пользователя, указанный хост и пометку using password. Проверьте настройки приложения и определите, используется ли Unix-сокет (localhost) или TCP (127.0.0.1 либо отдельный сервер). Сохраните резервную копию конфигурации, скрыв пароль от посторонних.
  2. Проверьте доступ, не раскрывая парольВ терминале на сервере приложения выполните mysql -h ИМЯ_СЕРВЕРА -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p ИМЯ_БАЗЫ -e "SELECT 1". После -p пароль вводится скрытно по запросу. Если тест работает, сравните настройки приложения и действующий хост; если нет, сохраните точное сообщение MySQL.
  3. Сверьте учётную запись и привилегииАдминистратор БД входит своим штатным способом и проверяет существование пары user+host, способ аутентификации и права только для нужной базы. В MySQL 8/9 следует использовать поддерживаемый механизм аутентификации и обновлённый клиент; старый mysql_native_password удалён в MySQL 9.0 и его нельзя предлагать как универсальное решение.
  4. Исправьте только подтверждённую причинуПосле резервной копии и согласования восстановите нужный пароль учётной записи либо необходимые минимальные права для конкретной базы. Не выдавайте GRANT ALL в надежде устранить любую ошибку и не меняйте пароль root без процедуры восстановления. Повторите тест подключения и запрос приложения, затем проверьте журнал ошибок.

#Способ 1. Войдите администратором и посмотрите учётные записи

Linux · Терминал (Bash)КомандаНужен sudo
В Debian/Ubuntu администратор может войти через сокет без пароля. В других системах используйте mysql -u root -p.
sudo mysql
SQLКоманда
Покажет, для каких хостов существует пользователь, какой плагин аутентификации он использует и какие права выданы. Имя app замените на своё.
SELECT user, host, plugin FROM mysql.user WHERE user = 'app';
SHOW GRANTS FOR 'app'@'localhost';

#Способ 2. Создайте пользователя или задайте пароль

SQLС осторожностью
Создаёт пользователя и выдаёт права только на одну базу appdb. Не выдавайте *.* приложениям без необходимости. Пароль подставьте свой.
-- Пример для администратора БД, только после проверки имени БД и прав:
CREATE USER IF NOT EXISTS 'app'@'localhost' IDENTIFIED BY 'ЗАДАЙТЕ_СВОЙ_СЛОЖНЫЙ_ПАРОЛЬ';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'app'@'localhost';
-- Добавляйте иные права лишь если их требует приложение.
-- Существующему пользователю пароль эта команда CREATE USER не меняет.

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

SQLС осторожностью
Меняет пароль существующего пользователя. Не забудьте обновить его в конфигурации приложения.
ALTER USER 'app'@'localhost' IDENTIFIED BY 'новый-надёжный-пароль';

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

#Способ 3. Проверьте плагин аутентификации

Клиентам, не поддерживающим современную аутентификацию MySQL, требуется обновление драйвера/библиотеки и проверка конфигурации TLS. Плагин mysql_native_password в MySQL 8.4 отключён по умолчанию, в MySQL 9.0 удалён: не переключайте пользователя на него вслепую. Перед изменением учётной записи проверьте версию сервера и поддержку клиентом действующего плагина.

SQLС осторожностью
Применяйте только для совместимости со старым клиентом. В новых версиях MySQL этот плагин может быть отключён.
-- НЕ применяйте mysql_native_password на современных выпусках MySQL.
-- Обновите устаревший драйвер; проверьте действующий плагин:
SELECT user, host, plugin FROM mysql.user WHERE user = 'app';

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

#Способ 4. Проверьте конфигурацию приложения

  • Сверьте имя пользователя, хост и порт: localhost и 127.0.0.1 могут использовать разные способы подключения.
  • Убедитесь, что в пароле нет спецсимволов, которые ломают строку подключения (используйте кодирование или экранирование).
  • Проверьте, не подменяются ли значения переменными окружения.

#Как проверить результат

Linux · Терминал (Bash)Команда
Если вход прошёл, команда вернёт 1. Пароль будет запрошен интерактивно.
mysql -u app -p -h localhost -e 'SELECT 1'

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

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

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