sql >> Database >  >> RDS >> Mysql

FOUT 1698 (28000):Toegang geweigerd voor gebruiker 'root'@'localhost'

Sommige systemen zoals Ubuntu, MySQL gebruikt de UNIX auth_socket plug-in standaard.

In feite betekent dit dat:db_users die het gebruiken, worden "geauthenticeerd" door de gebruikersgegevens van het systeem. U kunt zien of uw root gebruiker wordt zo ingesteld door het volgende te doen:

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

Zoals je kunt zien in de query, is de root gebruiker gebruikt de auth_socket plug-in.

Er zijn twee manieren om dit op te lossen:

  1. U kunt de root . instellen gebruiker om het mysql_native_password . te gebruiken plug-in
  2. U kunt een nieuwe db_user . maken met jou system_user (aanbevolen)

Optie 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

Optie 2: (vervang YOUR_SYSTEM_USER door de gebruikersnaam die je hebt)

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

Onthoud dat als u optie #2 gebruikt, u verbinding moet maken met MySQL als uw systeemgebruikersnaam (mysql -u YOUR_SYSTEM_USER ).

Opmerking: Op sommige systemen (bijv. Debian 9 (Stretch)) de plug-in 'auth_socket' heet 'unix_socket' , dus het bijbehorende SQL-commando moet zijn:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Uit de opmerking van @andy blijkt dat MySQL 8.x.x de auth_socket heeft bijgewerkt/vervangen voor caching_sha2_password . Ik heb geen systeemconfiguratie met MySQL 8.x.x om dit te testen. De bovenstaande stappen zouden u echter moeten helpen het probleem te begrijpen. Hier is het antwoord:

Een verandering vanaf MySQL 8.0.4 is dat de nieuwe standaard authenticatie plug-in 'caching_sha2_password' is. De nieuwe 'YOUR_SYSTEM_USER' heeft deze authenticatie-plug-in en je kunt nu inloggen vanuit de Bash-shell met "mysql -u YOUR_SYSTEM_USER -p" en het wachtwoord voor deze gebruiker op de prompt opgeven. De stap "UPDATE user SET plugin" is niet nodig.

Voor de 8.0.4 standaard authenticatie plug-in update, zie https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/



  1. Hetzelfde schema gebruiken voor meerdere SQL Server Agent-taken (T-SQL)

  2. 6 manieren om uw MariaDB-versie te controleren

  3. Hoe ORA-06512 op regelnummer op te lossen

  4. Los het probleem met de SQL Server-database die vastzit in de verdachte modus op een efficiënte manier op