Вопрос или проблема
Я использую Debian 11 с mariadb, и всё работало отлично. Вчера я заметил, что различные команды, такие как “/etc/init.d/mariadb reload” или “mysql -u root”, выдают ошибку:
ОШИБКА 1045 (28000): Доступ запрещён для пользователя ‘root’@’localhost’ (используя
пароль: НЕТ)
Но я могу войти с помощью “mysql -u root -p xxx”.
Пароль, похоже, в порядке:
SELECT User, Host, authentication_string,plugin FROM mysql.user WHERE
User=”root”;
даёт следующий вывод:
| root | localhost | *A1500BDAC90A8E0183B2803086BD6D6E0999EC60 |
mysql_native_password | | root | ::1 |
*A1500BDAC90A8E0183B2803086BD6D6E0999EC60 | mysql_native_password | | root | myserver | *A1500BDAC90A8E0183B2803086BD6D6E0999EC60 |
mysql_native_password | | root | 127.0.0.1 |
*A1500BDAC90A8E0183B2803086BD6D6E0999EC60 | mysql_native_password |
Что я не понимаю: с плагином “mysql_native_password” и установленным паролем я должен иметь возможность войти с помощью “mysql -u root”, например. bind-address установлен на 0.0.0.0.
SHOW GRANTS FOR ‘root’@’localhost’;
выдаёт эти 3 строки:
Строка 1: GRANT ALL PRIVILEGES ON . TO root
@localhost
IDENTIFIED BY PASSWORD ‘*A1500BDAC90A8E0183B2803086BD6D6E0999EC60’ WITH GRANT OPTION
Строка 2: GRANT PROXY ON ”@’%’ TO ‘root’@’localhost’ WITH GRANT OPTION
Строка 3: GRANT PROXY ON ”@’%’ TO ‘root’@’localhost’ WITH GRANT OPTION
MySQL (mariadb) запущен на сервере, все сайты могут получить к нему доступ без каких-либо ошибок. Только debian не может получить доступ. Есть идеи?
Правка :
Я думаю, я знаю в чём проблема: Упомянутые привилегии для root@localhost выглядят как синтаксис старой версии mysql. Я использую mariadb на Debian 11. Я полагаю, что я случайно перенёс экспорт привилегий root один за другим со старой системы на новую.
Вопрос только в том: как это должно выглядеть правильно? Я посмотрел на другой сервер с Debian 11, где это работает. Там привилегии выглядят так:
GRANT ALL PRIVILEGES ON . TO root@localhost IDENTIFIED VIA
mysql_native_password USING
‘*84A00BCFE90A8E0183B2803086BD6D6E0999EC12’ OR unix_socket WITH GRANT
OPTION
Могу ли я попробовать это, не рискуя полностью заблокировать себя? Снова: веб-сервер со всеми базами данных mysql работает нормально. Стоит ли мне попробовать выполнить эту строку, конечно, с правильным хэшем пароля? Не мог бы кто-то подтвердить, пожалуйста. Спасибо!
Я решил проблему!
Так как никто не подтвердил, что это сработает, как упомянуто в моей “Правке”, я рискнул и попробовал. Выполнив команду mysql:
GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED VIA
mysql_native_password USING
'*84A00BCFE90A8E0183B2803086BD6D6E0999EC12' OR unix_socket WITH GRANT
OPTION
… я снова смог это запустить. У root в debian теперь снова есть доступ к mysql root без пароля.
Надеюсь, это поможет кому-то, кто сталкивается с той же проблемой. Просто убедитесь, что вы заменили хэш ‘*84A00BCFE90A8E0183B2803086BD6D6E0999EC12’ на свой собственный, в зависимости от вашего пароля!
Ответ или решение
Ошибка MySQL: ERROR 1045 (28000): Доступ запрещен для пользователя ‘root’@’localhost’
Введение
Вы столкнулись с ошибкой доступа ERROR 1045 (28000): Access denied for user 'root'@'localhost'
в MariaDB на Debian 11, несмотря на то, что пароль, похоже, верен. Данная проблема может быть связана с несколькими аспектами конфигурации пользователя в вашей базе данных. В этой статье мы проанализируем возможные причины и решение данной проблемы.
Причины возникновения ошибки
Существует несколько факторов, которые могут вызывать эту ошибку:
-
Отсутствие пароля при аутентификации: Ваша команда
mysql -u root
пытается войти без указания пароля, что приводит к ошибке. Если вы хотите аутентифицироваться как root без пароля, то вы должны установить пустой пароль для пользователя root. -
Настройка плагина аутентификации: Ваша база данных, похоже, использует плагин
mysql_native_password
. Если пользователь root настроен неправильно или имеет другую схему аутентификации, это может вызвать проблемы с доступом. -
Изменение привилегий: Если вы мигрировали данные с более старой версии MySQL или MariaDB, возможны несовместимости в привилегиях или синтаксисе команд GRANT, что может затруднить доступ.
Проверка конфигурации пользователя
Для более детального анализа воспользуйтесь следующими командами в MariaDB:
SELECT User, Host, authentication_string, plugin FROM mysql.user WHERE User="root";
Это даст вам информацию о том, какие схемы аутентификации используются и как настроены пользователи.
Также выполните команду:
SHOW GRANTS FOR 'root'@'localhost';
Это покажет текущие привилегии пользователя root
и может указать на возможные конфликты.
Проблемы совместимости
Как вы правильно заметили, синтаксис привилегий в MariaDB, особенно после миграции, может отличаться. Пример строки, который вы представили, выглядит следующим образом:
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED VIA mysql_native_password USING '*84A00BCFE90A8E0183B2803086BD6D6E0999EC12' OR unix_socket WITH GRANT OPTION;
Решение проблемы
К счастью, вы уже нашли способ решения данной проблемы, выполнив команду для обновления привилегий. Если вы хотите повторить этот процесс, обязательно выполните следующие шаги:
- Замените
'*84A00BCFE90A8E0183B2803086BD6D6E0999EC12'
на актуальный хеш для вашего пароля. - Выполните команду в MariaDB, чтобы обновить привилегии.
- После выполнения команды рекомендуется перезапустить службу MariaDB для применения изменений.
Заключение
Вы успешно восстановили доступ к базе данных, обновив привилегии для пользователя root
. Благодаря этому теперь вы можете выполнять все необходимые команды и операции, не сталкиваясь с ошибками доступа. Если у вас возникнут дальнейшие вопросы или проблемы, не стесняйтесь обращаться за помощью на специализированные форумы и сообщества.