zaLinux.ru

Решение проблемы с ошибкой #1698 - Access denied for user ‘root’@’localhost’


Если при попытке входа в phpMyAdmin вы видите ошибку:

#1698 - Access denied for user 'root'@'localhost'

то данная статья поможет вам разобраться в проблеме и устранить её.

MySQL 5.7 изменила модель безопасности: теперь вход в MySQL под рутом (root) требует sudo (при этом пароль всё равно может быть пустым). Т.е. phpMyAdmin невозможно использовать под пользователем рутом. Подробное объяснение смотрите в статье Аутентификация по паролю и unix_socket в MySQL и MariaDB.

Самым простым (и самым безопасным) решением будет создать нового пользователя и предоставить ему требуемые привилегии.

Но начнём мы с другого решения:

Разрешить пользователю root подключаться к MySQL и MariaDB без sudo

Для получения доступа к базе данных MySQL/MariaDB обычному пользователю без использования sudo привилегий, зайдите в приглашение командной строки MySQL

sudo mysql

и запустите следующие команды:

Переключиться на аутентификацию по паролю можно следующим SQL запросом:

use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ПАРОЛЬ';
exit

Обратите внимание, что вам нужно ввести ПАРОЛЬ.

Затем попробуйте войти в базу данных без sudo, как показано ниже.

mysql -u root -p

==================Устаревший метод==================

Это устаревший метод, он не работает в новых версиях MariaDB, но может по-прежнему работать в MySQL.

Для получения доступа к базе данных MySQL/MariaDB обычному пользователю без использования sudo привилегий, зайдите в приглашение командной строки MySQL

sudo mysql

и запустите следующие команды:

use mysql;
update user set plugin='' where User='root';
flush privileges;
exit

Затем перезапустите службу MySQL и попробуйте войти в базу данных без sudo, как показано ниже.


sudo systemctl restart mysql.service
mysql -u root -p

==================Конец устаревшего метода==================

Создание нового пользователя для работы с MySQL через phpMyAdmin

1. Подключитесь к mysql

sudo mysql --user=root mysql

2. Создайте пользователя для phpMyAdmin

Запустите следующие команды (замените some_pass на желаемый пароль):

CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;


Если ваш phpMyAdmin подключается к localhost, то этого должно быть достаточно.

3. Опционально: разрешение удалённых соединений

Помните: разрешение удалённому пользователю иметь все привилегии – это вопрос безопасности, имейте это ввиду, выполняя последующие шаги. Если вы хотите, чтобы этот пользователь имел те же привилегии во время удалённых подключений, дополнительно выполните (замените some_pass на пароль, используемый на Шаге #2):

CREATE USER 'phpmyadmin'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

4. Обновите phpMyAdmin

Используя sudo, отредактируйте файл /etc/dbconfig-common/phpmyadmin.conf обновив значения пользователь/пароль в следующих секциях (замените some_pass на пароль, используемый на шаге #2):

# dbc_dbuser: database user
#       the name of the user who we will use to connect to the database.
dbc_dbuser='phpmyadmin'

# dbc_dbpass: database user password
#       the password to use with the above username when connecting
#       to a database, if one is required
dbc_dbpass='some_pass'

Рекомендуемые статьи:

23 Комментарии

  1. SanchO-SEK

    Пипец, почти всю ночь промучился с этим вопросом и чего только не перепробовал, а в итоге… Как вы говорите:

    "MySQL 5.7 изменила модель безопасности: теперь вход в MySQL под рутом (root) требует sudo (при этом пароль всё равно может быть пустым). Т.е. phpMyAdmin невозможно использовать под пользователем рутом."

    Нет, вы "врубитесь" еще раз:

    "MySQL 5.7 изменила модель безопасности: теперь вход в MySQL под рутом (root) требует sudo"

    Потратил столько времени и сил, а Вы описали суть проблемы всего несколькими словами!..

    Создал нового пользователя 'phpMyAdmin' и всё заработало.

    Огромное СПАСИБО за помощь!

    P.S. Ранее таких трудностей не было - при установке MySQL он просил указать пароль для root после чего всё работало без проблем. В этот же раз при установке пароль для root не спрашивало и после под root пускало только с sudo (phpMyAdmin таким образом не мог авторизоваться). Не зная о изменении модели безопасности я и попал в тупик 🙁

  2. Артем
    sudo mysql

    и запустите следующие команды:

    use mysql;
    update user set plugin='' where User='root';
    flush privileges;
    exit

    Затем перезапустите службу MySQL и попробуйте войти в базу данных без sudo, как показано ниже.

    sudo systemctl restart mysql.service
    mysql -u root -p

    После этих манипуляций совсем зайти не могу

    1. Aleksey

      Аналогичная проблема, помогло это

      use mysql;
      UPDATE mysql.user SET authentication_string = PASSWORD('12345') WHERE User = 'root' AND Host = 'localhost';
      update user set plugin='mysql_native_password' where User='root';
      flush privileges;
      exit
      
      1. serg

        Братик, дай расцулую в дёсна!

        1. Южный Централ

          Я после  тебя !

      2. Павел

        Мда. Теперь тупо не пускает, на все комманды: mysql, mysql -u root -p, Enter password: Ответ один: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

        1. Alexey (Автор записи)

          Такая ошибка возникает при неправильном имени пользователя или пароле. Если вы вводили команды из статьи или из комментариев, в некоторых из них вместо заполнителя нужно ввести свой новый пароль. Видимо, вы этого не сделали.

          Возможно вам поможет статья «Как сбросить пароль root для MySQL или MariaDB».

      3. Oleksandr

        Спасибо, очень помогло!

  3. Южный Централ

    Спасибо автор, у тебя отличный сайт! В закладки! 

  4. GineTik

    Привет, где запускать эти команды? 

    1. Alexey (Автор записи)

      Приветствую! Эта инструкция для Linux. На Windows у меня такой проблемы нет, устанавливал по этой инструкции: https://hackware.ru/?p=21

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

  5. GineTik

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

    1. Alexey (Автор записи)

      Здесь решение для ошибки 1698, а у вас ошибка 1045. При установке (обновлении) у вас должен был запроситься пароль для root.

      Если это какая-то сборка, то спросите на официальном сайте.

      Если это официальная MySQL/MariaDB то можно просто сбросить пароль root. Но для этого вам нужно найти файл mysqld.exe — он в той папке, где установлена MySQL.

      Если найдёте этот файл, то откройте командную строку, для этого нажмите Win+r и введите cmd и нажмите Enter. В открывшееся окно перетащите этот файл, добавьте опцию --version и нажмите Enter:

      Должно вывестись что-то вроде такого:

      C:\Server\bin\mysql-8.0\bin\mysqld.exe Ver 8.0.19 for Win64 on x86_64 (MySQL Community Server - GPL)

      Если всё получится, то напишите сюда, скажу что делать дальше.

      1. GineTik

        вот что у меня получилось

        1. GineTik

          ой, вот лучше

          1. Alexey (Автор записи)

            Для начала попробуйте следующие учётные данные:

            • Пользователь: root
            • Пароль: root

            Если не поможет, видимо авторы Open Server говорят пароль входа только тем, кто сделал донат ))))))))

            В общем если не поможет, то перейдите к статье «Как сбросить пароль root MySQL или MariaDB в Windows» которую я специально написал по вашему вопросу, там всё подробно и пошагово описано как сбросить забытый пароль MySQL и MariaDB.

          2. GineTik

            спасибо огромное помогло ввести пароль рут)

  6. malcowicz

    Ребята, выручайте. Всё перепробовал.

    После нескольких попыток восстановить пароль(который был по умолчанию без пароля, то есть не пускало без пароля) перестало заходить и через sudo mysql. Я удалил полностью по мануалу. Далее начал устанавливать и теперь заходит через sudo mysql.

    Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)

    Как было указано в мануале установил MEDIUM пароль: '12345678'

    И всё-равно при входе ошибка 1698:

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

    То есть если при установке не ставишь пароль, он говорит пароль неверный. Если ставишь пароль, то всё-равно пароль неверный. Что я делаю не так?

    1. Alexey (Автор записи)

      Вы устанавливали пароль root’а с помощью mysql_secure_installation? Единственная идея, что вы как-то неправильно установили пароль.

      Вы можете сбросить пароль root для MySQL и установить его заново.

      1. malcowicz

        Да, устанавливал. Без установки пароля всё-равно просит его ввести. После первой установки я не трогал пароль, то есть его не должно было быть. По идее оставляешь поле пустым, жмёшь enter и должно войти, но там была эта же ошибка 1698. Так я нашёл эту статью. Пробовал варианты восстановления пароля отсюда, на каком то из этапов словил ошибку. После чего перестало полностью пускать даже через sudo, удалил полностью, переустановил с паролем и всё-равно не работает. Какой пароль нужно установить, чтобы он работал? Спасибо.

      2. malcowicz

        Проблема решена. Для тупых как я нужен манул "Как правильно придумать пароль, чтобы система его приняла".

        Я написал 8 строчных букв, одну заглавную, одну цифру и один спец символ(например: qwertyuiQ1!). Пароль принят и теперь заходит в учётку. Думаю у большинства новичков такая же ошибка. 3 дня потратил на это, ужас!

        1. Alexey (Автор записи)

          То есть получается, что корень проблемы в том, что пароль не соответствовал критериям безопасности? Значит на этапе установки пароля программа сообщала об этом — скорее всего, вы просто не обратили внимание на это сообщение.

          Кстати, требования к паролю можно изменить, об этом написано тут.

          1. malcowicz

            Корень проблемы в том, что по умолчанию пароль должен был отсутствовать, но в систему не пускало без пароля. На этапе установки программа в принципе не спрашивает про пароль. Скорее всего первым делом нужно включить поддержку паролей(как описано в одном из ваших мануалов, а может и зарубежных, их тоже курил). Почему то у меня по умолчанию эта функция была не активна. После включения функции даёт создать учётку и передать права. 

            Второй проблемой стало то, что при установке некорректного пароля(до включения поддержки паролей) система не ругается как будто всё хорошо и пароль принят. При попытке зайти по установленному вручную паролю выдаёт ошибку как в самом начале.(В этом моменте каждый начинает паниковать и перебирать все способы пока не сломает всё окончательно :)) 

            После включения поддержки паролей при попытке установить некорректный пароль получаем, наконец-то, ошибку несоответствия и там уже проще разобраться. Вбиваем ошибку в поиск и находим требования к созданию пароля. По умолчанию поддержка паролей отключена, но не пускает. Бред короче 🙂

            Итог: заходим через комманду sudo mysql, включаем поддержку паролей validate_password (

            select plugin_name, plugin_status from information_schema.plugins where plugin_name like 'validate%';

            install plugin validate_password soname 'validate_password.so';

            )

            , создаём новую учётку с логином вместо root (например: 'admin') с корректным паролем(например: 'qwertyuiQ!1') и передаём ей все права (

            CREATE USER 'admin'@'%' IDENTIFIED BY 'qwertyuiQ!1';

            GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;

            FLUSH PRIVILEGES;

            ).

            Далее уже входим в новую учётку( через команду: mysql -u admin -p). Скорее всего такая последовательность.

            P.S: Раньше видимо поддержка пароля работала со старта и пускала в систему либо без пароля, либо с паролями навроде root или user, либо выдавала корректную ошибку. По факту выдаваемая ошибка не ведёт к решению проблемы, а только запутывает. Если бы ошибка просила включить поддержку паролей, то проблемы авторизации в принципе бы не существовало.

Добавить комментарий для Aleksey Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *