sql >> Databasteknik >  >> RDS >> Mysql

FEL 1698 (28000):Åtkomst nekad för användaren 'root'@'localhost'

Vissa system som Ubuntu, MySQL använder UNIX auth_socket plugin som standard.

I grund och botten betyder det att:db_users som använder det, kommer att "autentiseras" av systemanvändarens autentiseringsuppgifter. Du kan se om din root användaren ställs in så här genom att göra följande:

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 |
+------------------+-----------------------+

Som du kan se i frågan, root användaren använder auth_socket plugin.

Det finns två sätt att lösa detta:

  1. Du kan ställa in roten användaren att använda mysql_native_password plugin
  2. Du kan skapa en ny db_user med dig system_user (rekommenderas)

Alternativ 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

Alternativ 2: (ersätt YOUR_SYSTEM_USER med det användarnamn du har)

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

Kom ihåg att om du använder alternativ #2 måste du ansluta till MySQL som ditt systemanvändarnamn (mysql -u YOUR_SYSTEM_USER ).

Obs! På vissa system (t.ex. Debian 9 (Stretch)) 'auth_socket' plugin kallas 'unix_socket' , så motsvarande SQL-kommando bör vara:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Från @andys kommentar verkar det som att MySQL 8.x.x har uppdaterat/ersatt auth_socket för caching_sha2_password . Jag har ingen systeminstallation med MySQL 8.x.x för att testa detta. Men stegen ovan bör hjälpa dig att förstå problemet. Här är svaret:

En förändring från och med MySQL 8.0.4 är att det nya standardinsticksprogrammet för autentisering är 'caching_sha2_password'. Den nya 'YOUR_SYSTEM_USER' kommer att ha denna autentiseringsplugin och du kan logga in från Bash-skalet nu med "mysql -u YOUR_SYSTEM_USER -p" och ange lösenordet för denna användare på prompten. Det finns inget behov av "UPDATE user SET plugin"-steget.

För 8.0.4 standardautentiseringspluginuppdateringen, se https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/



  1. Gruppera frågeresultat efter månad och år i postgresql

  2. JDBC batch operations förståelse

  3. Hur man ställer in en PostgreSQL-databas i Django

  4. Oracle Big Data SQL