phpMyAdmin: Access denied for user — почему не удаётся войти и что проверить

Вы открываете phpMyAdmin, вводите логин и пароль, но вместо списка баз данных получаете ошибку Access denied for user.

mysqli::real_connect(): (HY000/1045): Access denied for user 'user'@'localhost' (using password: YES)

или:

ERROR 1045 (28000):
Access denied for user 'user'@'localhost'

Вы открываете phpMyAdmin, вводите логин и пароль, но вместо списка баз данных получаете ошибку:

mysqli::real_connect(): (HY000/1045):
Access denied for user 'user'@'localhost' (using password: YES)

или:

ERROR 1045 (28000):
Access denied for user 'user'@'localhost'

Такая ошибка не означает, что phpMyAdmin сломан.

В большинстве случаев соединение с MySQL или MariaDB уже произошло, но сервер базы данных не разрешил авторизацию указанной учётной записи.

Проверять проблему удобно по цепочке:

phpMyAdmin → какой сервер БД → user@host → пароль → способ подключения → authentication plugin → права → config.inc.php

Главная задача — сначала определить, какая именно учётная запись пытается подключиться и к какому серверу, а уже потом менять пароли или права.

Если проблема связана с WordPress, полезно также открыть руководство об ошибке подключения WordPress к базе данных.

↑ К оглавлению

1. Что на самом деле означает Access denied

MySQL рассматривает учётную запись не только как имя пользователя.

Учитывается пара:

User + Host

То есть:

'app'@'localhost'

и:

'app'@'192.168.1.%'

— это разные учётные записи.

Поэтому сообщение:

Access denied for user 'app'@'localhost'

сразу даёт:

User = app
Host = localhost

Именно эту комбинацию нужно искать на сервере.

using password: YES

Например:

Access denied for user 'app'@'localhost'
(using password: YES)

означает:

пароль был передан

а не:

пароль верный

Причиной всё ещё может быть неправильный пароль.

↑ К оглавлению

2. Проверьте эти же данные без phpMyAdmin

На сервере:

mysql -u app_user -p -h localhost

или:

mariadb -u app_user -p -h localhost

Если здесь тоже Access denied

Например:

ERROR 1045 (28000):
Access denied for user 'app_user'@'localhost'

phpMyAdmin, скорее всего, ни при чём.

Проблема:

MySQL/MariaDB
↓
user@host
↓
password
↓
authentication

Если CLI входит, а phpMyAdmin — нет

Проверяйте:

  • сервер;
  • host;
  • socket;
  • config.inc.php;
  • auth_type;
  • сохранённые credentials;
  • controluser.
↑ К оглавлению

3. Проверьте localhost и 127.0.0.1

localhost и 127.0.0.1 могут использовать разные способы подключения.

Сравнить:

mysql -u app_user -p -h localhost

и:

mysql -u app_user -p -h 127.0.0.1 --protocol=TCP

Пример:

localhost   → работает
127.0.0.1   → Access denied

В config.inc.php:

$cfg['Servers'][$i]['host'] = 'localhost';

или:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

Socket при необходимости:

$cfg['Servers'][$i]['socket'] = '/path/to/mysql.sock';

Не менять host вслепую.

↑ К оглавлению

4. Проверьте, существует ли нужный user@host

Если есть admin access:

SELECT User, Host, plugin
FROM mysql.user
ORDER BY User, Host;

Если ошибка:

Access denied for user 'site_user'@'localhost'

искать:

site_user | localhost

Для конкретного account:

SHOW CREATE USER 'site_user'@'localhost';

Права:

SHOW GRANTS FOR 'site_user'@'localhost';

MariaDB 10.4+

основные данные аккаунтов находятся в mysql.global_priv, а mysql.user используется как совместимое представление.

UPDATE mysql.user ...

Для изменения пользователей используйте штатные команды управления.

↑ К оглавлению

5. Проверьте authentication plugin

Проверка:

SELECT User, Host, plugin

FROM mysql.user
WHERE User = 'site_user';

или:

SHOW CREATE USER 'site_user'@'localhost';

MySQL 8.4

  • стандартный plugin: caching_sha2_password;
  • не переключать автоматически на mysql_native_password;
  • mysql_native_password устарел и в MySQL 8.4 отключён по умолчанию.

Проверять совместимость клиента/phpMyAdmin/PHP driver.

↑ К оглавлению

6. Почему root входит через терминал, но phpMyAdmin пишет Access denied

Пример:

sudo mariadb

работает.

Но:

root

через phpMyAdmin:

Access denied for user 'root'@'localhost'

Причина может быть unix_socket authentication.

sudo mariadb не доказывает, что парольный вход root через phpMyAdmin обязан работать.

Не советовать отключать socket auth root только ради браузера.

На production лучше отдельный административный DB account с нужными правами.

↑ К оглавлению

7. Проверьте auth_type в phpMyAdmin

Стандартный пример:

$cfg['Servers'][$i]['auth_type'] = 'cookie';

Также упомянуть:

config
http
signon

auth_type = config

Пример:

$cfg['Servers'][$i]['auth_type'] = 'config';

и:

$cfg['Servers'][$i]['user'] = 'some_user';

$cfg['Servers'][$i]['password'] = '...';

Если MySQL password изменён, а config остался старым → Access denied.

Не публиковать config.inc.php.

controluser

Отдельно проверьте служебную учётную запись controluser, если она используется.

Пример:

$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = '...';

Если ошибка относится к:

'pma'@'localhost'

проверять configuration storage phpMyAdmin.

↑ К оглавлению

8. Если phpMyAdmin используется для базы WordPress

Через WP-CLI:

wp config get DB_NAME
wp config get DB_USER
wp config get DB_HOST

Не выводить DB_PASSWORD.

Пример:

DB_NAME = wordpress
DB_USER = wp_user
DB_HOST = localhost

Проверка:

mysql -u wp_user -p -h localhost wordpress

WordPress работает, а phpMyAdmin нет

Значит WordPress credentials рабочие, но phpMyAdmin может использовать другой:

  • host;
  • socket;
  • user;
  • instance.

WordPress тоже не подключается к базе

Тогда проблема может быть общей.

↑ К оглавлению

9. Не путайте ERROR 1045 и отсутствие прав на базу

ERROR 1045

ERROR 1045 (28000):
Access denied for user 'app'@'localhost'

Авторизация не прошла.

Проверять:

user
host
password
authentication plugin

ERROR 1044

ERROR 1044:
Access denied for user 'app'@'localhost'
to database 'example'

Пользователь уже вошёл, но нет нужных privileges.

Проверить:

SHOW GRANTS FOR 'app'@'localhost';
↑ К оглавлению

10. Как безопасно восстановить пользователя

Сначала определить:

  • какое приложение использует account;
  • какая база нужна;
  • какой Host нужен;
  • не используют ли credentials другие сервисы.

Не начинать с GRANT ALL ON *.*

Для WordPress ограничивать права нужной базой.

Логика:

wp_user
↓
только база конкретного WordPress

Не:

wp_user
↓
все базы сервера

Если password меняется, обновить соответствующий DB_PASSWORD в приложении.

Не делать это как эксперимент на production.

↑ К оглавлению

11. Проверьте, к тому ли MySQL-серверу подключается phpMyAdmin

Возможные варианты:

  • local MariaDB;
  • MySQL in Docker;
  • remote database;
  • hosting database;
  • multiple instances / ports.

Проверить:

host, port, socket.

SQL:

SELECT @@hostname, @@port, @@version;

И:

SHOW VARIABLES LIKE 'socket';

Затем выполните:

SELECT USER(), CURRENT_USER();

Объяснить различие:

  • USER() — client connection;
  • CURRENT_USER() — account, который MySQL реально использует для privilege checks.
↑ К оглавлению

13. Логи MySQL/MariaDB

MySQL:

journalctl -u mysql --since "10 minutes ago"

MariaDB:

journalctl -u mariadb --since "10 minutes ago"

Название service может отличаться.

Повторить попытку входа и искать событие того же времени.

Не включать logging чувствительных данных.

↑ К оглавлению

14. Быстрая диагностика

Шаг 1

Записать:

user
host
using password YES/NO

Шаг 2

CLI:

mysql -u USER -p -h HOST

Шаг 3

Сравнить:

mysql -u USER -p -h localhost

и:

mysql -u USER -p -h 127.0.0.1 --protocol=TCP

Шаг 4


SELECT User, Host, plugin
FROM mysql.user
WHERE User = 'USER';

Шаг 5

SHOW CREATE USER 'USER'@'HOST';

Шаг 6

SHOW GRANTS FOR 'USER'@'HOST';

Шаг 7

Проверить:

auth_type
host
port
socket
controluser

Шаг 8

Для WordPress:

DB_USER
DB_HOST
DB_NAME

Шаг 9

Authentication:

unix_socket
caching_sha2_password

Шаг 10

Повторить login одновременно с DB logs.

↑ К оглавлению

Почему пароль правильный, но phpMyAdmin всё равно пишет Access denied?

важны не только password, но и:

user
host
способ подключения
authentication plugin

Поэтому localhost и 127.0.0.1 могут вести себя по-разному.

↑ К оглавлению

Частые вопросы

Что означает Access denied for user 'root'@'localhost'?

Сервер MySQL/MariaDB отклонил попытку авторизации `root@localhost`. Причиной может быть неверный пароль, другой authentication plugin или способ подключения. В MariaDB на Linux `root` нередко использует socket-аутентификацию, поэтому успешный `sudo mariadb` не означает, что парольный вход root через phpMyAdmin обязан работать.

Почему phpMyAdmin не принимает пароль, хотя MySQL через терминал работает?

Сравните способ подключения. CLI может использовать Unix socket, а phpMyAdmin — другой host/socket или другой экземпляр базы. Также проверьте `auth_type`, `host` и `socket` в конфигурации phpMyAdmin.

Что означает using password: YES?

Это означает, что при попытке соединения был передан пароль. Это не подтверждение его правильности.

Нужно ли переключать MySQL на mysql_native_password?

Нет, не как универсальное решение. В актуальном MySQL 8.4 стандартным является `caching_sha2_password`, а `mysql_native_password` устарел и отключён по умолчанию. Сначала выясните реальную причину несовместимости или отказа.

Можно ли изменить пароль root через phpMyAdmin?

Техническая возможность зависит от прав и способа аутентификации, но менять authentication административного `root` только ради входа в phpMyAdmin обычно плохая идея. Сначала определите текущую модель безопасности сервера.

↑ К оглавлению

Главное

Ошибка:

Access denied for user 'name'@'host'

— это не просто сообщение неверный пароль.

Правильная цепочка:

кто подключается?
↓
откуда подключается?
↓
CLI повторяет ошибку?
↓
localhost или TCP?
↓
существует ли user@host?
↓
какой authentication plugin?
↓
какие права?
↓
куда подключается phpMyAdmin?
↓
что показывает лог?

Не начинать с удаления пользователей, изменения root и глобального GRANT.

Цель — понять, почему MySQL или MariaDB отклоняет именно эту учётную запись при этом способе подключения.

↑ К оглавлению

Нужна помощь с WordPress?

Если после последовательной проверки причина остаётся неясной, можно обратиться за диагностикой WordPress. Также доступны все инструкции WebFixer24.

↑ К оглавлению