Някои системи като Ubuntu, MySQL използва Плъгин за UNIX auth_socket по подразбиране.
По принцип това означава, че:db_users, които го използват, ще бъдат "удостоверени" от идентификационните данни на системния потребител. Можете да видите дали вашият root
потребителят се настройва по този начин, като прави следното:
sudo mysql -u root # I had to use "sudo" since it was a 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
плъгин.
Има два начина за решаване на това:
- Можете да зададете root потребител да използва
mysql_native_password
плъгин - Можете да създадете нов
db_user
с васsystem_user
(препоръчително)
Вариант 1:
sudo mysql -u root # I had to use "sudo" since it was new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
sudo 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 'YOUR_PASSWD';
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;
sudo service mysql restart
Не забравяйте, че ако използвате опция #2, ще трябва да се свържете с MySQL като потребителско име на системата (mysql -u YOUR_SYSTEM_USER
).
Забележка: На някои системи (напр. Debian 9
(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" и да предоставите паролата за този потребител в подкана. Не е необходима стъпката „АКТУАЛИЗИРАНЕ на приставката за потребителски SET“.
За актуализацията на приставката за удостоверяване по подразбиране 8.0.4 вижте https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/