mysql — ОШИБКА 1698 (28000): доступ запрещен для пользователя ‘root’ @ ‘localhost’

Итак … Я настраиваю новый сервер и продолжаю сталкиваться с этой проблемой.

Когда я пытаюсь войти в базу данных MySQL от имени пользователя root, я получаю сообщение об ошибке «ОШИБКА 1698 (28000): доступ запрещен для пользователя« root »@« localhost »».

Не имеет значения, подключусь ли я через терминал (SSH), через PHPMyAdmin или MySQL Client, например, Navicat. Все они терпят неудачу.

Я посмотрел в таблице mysql.user и получил следующее:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Как видите, root должен иметь доступ.

Сервер довольно прост, так как я пытался устранить это некоторое время сейчас ..

Он работает под управлением Ubuntu 16.04.1 LTS с Apache, MySQL и PHP, чтобы он мог размещать веб-сайты, и iRedMail 0.9.5-1, чтобы он мог размещать почту.

Вход в базу данных MySQL работает нормально, прежде чем я установлю iRedMail. Я тоже пробовал, просто устанавливая iRedMail, но потом root тоже не работает …

Если кто-то может сказать мне, как я могу исправить мою проблему с входом в MySQL или как я устанавливаю iRedMail, поверх существующей установки MySQL. И да, я попробовал Советы по установке и я не могу найти эти переменные в файлах конфигурации.

Любая помощь высоко ценится 🙂

166

Решение

В некоторых системах, таких как Ubuntu, mysql по умолчанию использует Плагин UNIX auth_socket.

В основном это означает, что: db_users, использующий его, будет «auth» учетные данные пользователя системы. Вы можете увидеть, если ваш root пользователь настраивается следующим образом:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Как вы можете видеть в запросе, root пользователь использует auth_socket плагин

Есть 2 способа решить эту проблему:

  1. Вы можете настроить пользователя root на использование mysql_native_password плагин
  2. Вы можете создать новый db_user с тобой system_user (рекомендуемые)

Опция 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Вариант 2: (замените YOUR_SYSTEM_USER на ваше имя пользователя)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Помните, что если вы используете опцию №2, вам придется подключиться к mysql в качестве имени пользователя вашей системы (mysql -u YOUR_SYSTEM_USER)

Замечания: В некоторых системах (например, Debian stretch) вызывается плагин auth_socket ‘UNIX_SOCKET’, поэтому соответствующая команда SQL должна быть: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Обновить:
из комментария @ andy кажется, что mysql 8.x.x обновил / заменил auth_socket за caching_sha2_password У меня нет системной настройки с mysql 8.x.x, чтобы проверить это, однако описанные выше шаги должны помочь вам понять проблему. Вот ответ:

Одно из изменений в MySQL 8.0.4 заключается в том, что новый подключаемый модуль аутентификации по умолчанию — caching_sha2_password. Новый ‘YOUR_SYSTEM_USER’ будет иметь этот плагин auth, и теперь вы можете войти в оболочку bash с помощью «mysql -u YOUR_SYSTEM_USER -p» и предоставить пароль для этого пользователя в приглашении. Нет необходимости в шаге «UPDATE user SET plugin». Для обновления плагина аутентификации 8.0.4 по умолчанию см. https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

563

Другие решения

Проверьте здесь:

Новая версия MYSQL делает это таким образом.

В новом моя-SQL если при установке пароль оставлен пустым, он основывается на auth_socket плагин.

Правильный способ — войти в my-sql с sudo привилегия.

$ sudo mysql -u root -p

А затем обновить пароль с помощью:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Как только это будет сделано stop and start MySQL сервер.

$  sudo service mysql stop
$  sudo service mysql start

Для получения полной информации вы можете обратиться к эта ссылка.

Прокомментируйте любые сомнения.

42

Я бы предложил удалить соединение Mysql —

ОБНОВЛЕНИЕ-Это для Mysql версии 5.5, если ваша версия отличается, пожалуйста, измените первую строку соответственно

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

И установите снова Но на этот раз установите пароль пользователя root.
Это сэкономит много усилий.

sudo apt-get update
sudo apt-get install mysql-server
7

У меня была эта проблема на виртуальной машине Debian 8, с которой я взаимодействовал через Putty на моем рабочем столе Windows 10.

Я попробовал различные предложения здесь, но ничего не получилось, и я запускаю MariaDB на хосте Debian. В конце концов я обнаружил, что не могу запустить сервер БД в безопасном режиме, но мне это не нужно, и следующие команды действительно работают для меня, то есть позволяют вновь созданному пользователю MySql войти на сервер MySql / MariaDB:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Если вышеупомянутое не совсем работает для вас, выполните шаги, описанные в сообщении zetacu выше (zetacu) затем следуйте моим указаниям.

Теперь вы должны иметь возможность использовать клиент удаленного терминала и безопасно войти в MySQL с помощью команды:

mysql -u your_user_name -p

* введите пароль при появлении запроса

4

Вы хотите получить доступ к MySQL от имени пользователя root, но не предоставляете правильный пароль пользователя root.

Если вам нужно установить новый пароль для root, На сайте MySQL есть отличная документация о том, как это сделать: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

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

1

шаг 1. sudo mysql -u root -p

шаг 2. USE mysql;

шаг 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Здесь «admin» — ваш новый пароль, вы можете изменить его.

Шаг 4 exit

Благодарю. Вы сделали.

1

Первый шаг: перейдите в /etc/phpmyadmin/config.inc.php, затем раскомментируйте строки, где вы найдете AllowNoPassword.
Второй шаг: войдите в свою учетную запись mysql по умолчанию

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

и это все!

0

Тот работал на меня:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
0
По вопросам рекламы [email protected]