Я встановлюю новий сервер і продовжую стикатися з цією проблемою.
Коли я намагаюся увійти в базу даних MySQL з правами користувача root, я отримую помилку:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Не має значення, чи підключаюся я через термінал (SSH), через PHPMyAdmin або MySQL-клієнт, наприклад, 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. І так, я спробував Поради щодо встановлення, і я не можу знайти ці змінні в конфігураційних файлах.
У деяких системах, таких як Ubuntu, mysql за замовчуванням використовує UNIX auth_socket plugin.
В основному це означає, що db_користувачі, що використовують його, будуть "авторизуватися" за повноваженнями системного користувача. Ви можете перевірити, чи налаштований Ваш 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 способами:
db_user
з вашим ystem_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' буде мати цей плагін авторизації і тепер ви можете увійти в систему з оболонки bash за допомогою "mysql -u YOUR_SYSTEM_USER -p" і вказати пароль для цього користувача у відповідному запиті. Немає необхідності в кроці &quo ;UPDATE user SET plugin&quo ;. Оновлення плагіна за замовчуванням до версії 8.0.4 див. за посиланням https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/.
Я б запропонував прибрати з'єднання 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
Ви хочете отримати доступ до MySQL від імені користувача root, але ви не надаєте правильний пароль root.
Якщо вам потрібно встановити новий пароль для root, на сайті MySQL є чудова документація про те, як це зробити: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
Я не буду показувати процес тут, тому що документація по MySql за вищевказаним посиланням є чіткою та зрозумілою.