Mysql
 sql >> Datenbank >  >> RDS >> Mysql

FEHLER 1698 (28000):Zugriff verweigert für Benutzer 'root'@'localhost'

Einige Systeme wie Ubuntu, MySQL verwenden den UNIX auth_socket Plugin standardmäßig.

Im Grunde bedeutet dies Folgendes:db_users, die es verwenden, werden durch die Anmeldeinformationen des Systembenutzers authentifiziert. Sie können sehen, ob Ihr root Benutzer wird folgendermaßen eingerichtet:

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

Wie Sie in der Abfrage sehen können, ist die root Benutzer verwendet den auth_socket Plugin.

Es gibt zwei Möglichkeiten, dies zu lösen:

  1. Sie können die Root festlegen Benutzer das mysql_native_password verwenden Plugin
  2. Sie können einen neuen db_user erstellen mit Ihnen system_user (empfohlen)

Möglichkeit 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

Option 2: (Ersetzen Sie YOUR_SYSTEM_USER durch den Benutzernamen, den Sie haben)

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

Denken Sie daran, dass Sie sich bei Verwendung von Option #2 mit Ihrem Systembenutzernamen mit MySQL verbinden müssen (mysql -u YOUR_SYSTEM_USER ).

Hinweis: Auf einigen Systemen (z. B. Debian 9 (Stretch)) das 'auth_socket'-Plugin heißt 'unix_socket' , also sollte der entsprechende SQL-Befehl lauten:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Aus dem Kommentar von @andy geht hervor, dass MySQL 8.x.x den auth_socket aktualisiert/ersetzt hat für caching_sha2_password . Ich habe kein System-Setup mit MySQL 8.x.x, um dies zu testen. Die obigen Schritte sollten Ihnen jedoch helfen, das Problem zu verstehen. Hier ist die Antwort:

Eine Änderung ab MySQL 8.0.4 ist, dass das neue Standard-Authentifizierungs-Plug-in „caching_sha2_password“ ist. Der neue „YOUR_SYSTEM_USER“ wird dieses Authentifizierungs-Plugin haben und Sie können sich jetzt von der Bash-Shell mit „mysql -u YOUR_SYSTEM_USER -p“ anmelden und das Passwort für diesen Benutzer an der Eingabeaufforderung eingeben. Der Schritt „UPDATE user SET plugin“ ist nicht erforderlich.

Informationen zum Update des 8.0.4-Standardauthentifizierungs-Plugins finden Sie unter https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/