Създавам нов сървър и продължавам да се сблъсквам с този проблем.
Когато се опитам да вляза в базата данни MySQL с потребителя root, получавам грешката:
ERROR 1698 (28000): Достъпът е отказан за потребителя '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.
По принцип това означава, че: Можете да видите дали вашият потребител root
е настроен по този начин, като направите следното: db_users, които го използват, ще бъдат "auth" от системен потребител credentias.
$ 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 начина за решаване на този проблем:
mysql_native_password
.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' ще има този плъгин за ауторизация и вече можете да влезете от bash shell с "mysql -u YOUR_SYSTEM_USER -p" и да предоставите паролата за този потребител в подкана. Няма нужда от стъпката "UPDATE user SET plugin". За актуализацията на плъгина Auth по подразбиране за версия 8.0.4 вижте: https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/
Бих предложил да премахнете връзката с Mysql -
UPDATE - Това е за 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 на горния линк е ясна и кратка.