MySQL и MariaDB LinuxMySQL 8.0/8.4Percona Server 8.0/8.4 1045

MySQL: ERROR 1045 Access denied после смены пароля пользователя

  • Обновлено
  • Чтение ≈ 4 минуты

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

Сначала проверьте вход непосредственно с того же узла и тем же способом, что использует приложение. Изменение пароля на сервере без синхронизации с клиентами может одновременно остановить несколько сервисов.

В этой статье
  1. Что означает неисправность и в каких условиях возникает
  2. Возможные причины: как различить
  3. Пошаговая диагностика и устранение
  4. Как проверить исправление и что делать, если оно не помогло

#Что означает неисправность и в каких условиях возникает

После смены пароля пользователя приложения появляется ERROR 1045 (28000): Access denied for user ... (using password: YES). Это не обязательно неверный новый пароль: приложение может подключаться как другая пара user@host, использовать старый файл настроек или несовместимый клиент. Сначала проверьте вход непосредственно с того же узла и тем же способом, что использует приложение. Изменение пароля на сервере без синхронизации с клиентами может одновременно остановить несколько сервисов.

#Возможные причины: как различить

Возможная причинаКак узнатьЧто делать
Остался старый секрет в конфигурацииОдин из контейнеров, фоновых работников или секретных хранилищ не обновился.mysql -p вручную проходит, а конкретный сервис по-прежнему выдаёт 1045.Найти действующий источник пароля без записи секрета в журнал.
Подключение к другому user@hostДля localhost и удалённого IP у MySQL могут быть разные записи.Ошибка показывает не тот Host, который ожидался.Сверить точный адрес клиента и учётную запись.
Учётная запись блокирована или изменён способ входаПосле ротации могли смениться плагин аутентификации или состояние учётной записи.Проверки администратора показывают lock или другой плагин.Согласовать восстановление именно нужной учётной записи.

#Пошаговая диагностика и устранение

  1. Зафиксируйте безопасные признакиСкопируйте только номер ошибки, имя учётной записи, видимый клиентский Host и время в служебную заявку. Не прикладывайте полные строки подключения, секреты и файлы .env. Убедитесь, что сервис действительно подключается к нужному экземпляру MySQL, а не к резервному серверу со старым паролем.
  2. Подключитесь вручную с узла приложенияНа той же машине, где работает сайт, откройте терминал через SSH. Запустите mysql -h 127.0.0.1 -u app_user -p, заменив app_user и адрес; параметр -p без значения запросит пароль интерактивно и не оставит его в истории команд. Если приложение использует Unix-сокет и localhost, выполните отдельную проверку mysql -h localhost -u app_user -p: это разные способы соединения.
  3. Сравните ожидаемую и фактическую пару user@hostПри успешном подключении запустите SELECT USER(), CURRENT_USER();: USER() показывает переданные клиентом имя/узел, CURRENT_USER() — запись, по которой сервер выполнил аутентификацию. Если подключение не прошло, администратор должен посмотреть записи mysql.user для указанного имени с безопасного административного доступа.
  4. Проверьте единственный действующий источник настроекВ приложении найдите конфигурацию подключения: переменные окружения, секреты панели, контейнерный файл, настройки фонового обработчика. Сверьте адрес, порт и имя пользователя с ручным тестом. Не выводите пароль через echo, phpinfo() или на веб-страницу; при исправлении секрета используйте обычный механизм загрузки защищённых переменных и корректный перезапуск только приложения.
  5. Проверьте состояние записи у администратораВ административной сессии выполните SELECT User,Host,plugin,account_locked FROM mysql.user WHERE User='app_user';, заменив имя. account_locked показывает, заблокирована ли учётная запись. При отсутствии права SELECT попросите DBA; предоставлять доступ к mysql.user веб-приложению нельзя. После обновлений 8.4 учитывайте, что устаревший mysql_native_password может быть недоступен по умолчанию.
  6. Восстановите корректный пароль контролируемоЕсли причина в ошибочной ротации, администратор должен изменить секрет через принятый механизм, синхронно обновить зависимые приложения и проверить вход перед распространением. В production не задавайте общие пароли и не передавайте их в SQL-команде через общий чат. План отката — восстановить предыдущий секрет из защищённого хранилища, если это разрешает политика, а затем повторно проверить все службы.
  7. Перепроверьте доступ без расширения привилегийПосле устранения 1045 в ручном сеансе введите SELECT 1; — должна появиться строка с числом 1. Затем откройте страницу сайта и фоновое задание, которым нужен доступ к БД. Нельзя исправлять 1045 выдачей ALL PRIVILEGES или удалением пароля; такие действия увеличивают риск и не гарантируют устранения причины.
  8. Обработайте остаточные сбои после ротацииЕсли ручное подключение работает, а сайт всё ещё выдаёт 1045, убедитесь, что старые PHP-FPM-работники или контейнеры перезапущены через штатный процесс развёртывания и что секрет не кешируется. Если ошибка возникает лишь с отдельного сервера, сравните исходный IP и существующую запись user@host; передайте DBA имя и адрес без содержимого секрета.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Выполняется только после успешного подключения в mysql>.
    SQLКоманда
    Выполняется только после успешного подключения в mysql>. Первая команда определяет выбранную запись, вторая безопасно проверяет запрос.
    SELECT USER(), CURRENT_USER();
    SELECT 1;
    Вариант 2Только для DBA с соответствующим доступом.
    SQL
    Только для DBA с соответствующим доступом. Имя app_user является примером.
    SELECT User, Host, plugin, account_locked FROM mysql.user WHERE User = 'app_user';

#Как проверить исправление и что делать, если оно не помогло

Исправление подтверждено, если клиент с тем же host и user выполняет SELECT 1, а приложение и фоновые задания больше не сообщают 1045. Если сбой остаётся только в одной среде, исследуйте источник секретов и совпадение пользователь/узел; для отката восстановите согласованную предыдущую конфигурацию доступа, а не права на всю БД.

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

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

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