Mysql
 sql >> база данни >  >> RDS >> Mysql

ГРЕШКА 1698 (28000):Достъпът е отказан за потребител 'root'@'localhost'

Някои системи като 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 плъгин.

Има два начина за решаване на това:

  1. Можете да зададете root потребител да използва mysql_native_password плъгин
  2. Можете да създадете нов 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/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какъв е еквивалентът на SQL Server на ELT() в MySQL?

  2. MySQL JDBC драйвер 5.1.33 – Проблем с часовата зона

  3. разлика между първичен ключ и уникален ключ

  4. MySQL 8 Общи изрази за таблица CTE

  5. Как да създадете съхранена процедура в MySQL