sql >> Database teknologi >  >> RDS >> Mysql

FEJL 1698 (28000):Adgang nægtet for brugeren 'root'@'localhost'

Nogle systemer som Ubuntu, MySQL bruger UNIX auth_socket plugin som standard.

Grundlæggende betyder det, at:db_users, der bruger det, vil blive "godkendt" af systembrugerens legitimationsoplysninger. Du kan se, om din root bruger er sat op på denne måde ved at gøre følgende:

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 forespørgslen, er root brugeren bruger auth_socket plugin.

Der er to måder at løse dette på:

  1. Du kan indstille roden bruger til at bruge mysql_native_password plugin
  2. Du kan oprette en ny db_user med dig system_user (anbefalet)

Mulighed 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

Mulighed 2: (erstat YOUR_SYSTEM_USER med det brugernavn, 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

Husk, at hvis du bruger mulighed #2, bliver du nødt til at oprette forbindelse til MySQL som dit systembrugernavn (mysql -u YOUR_SYSTEM_USER ).

Bemærk: På nogle systemer (f.eks. Debian 9 (Stretch)) 'auth_socket'-pluginnet hedder 'unix_socket' , så den tilsvarende SQL-kommando skal være:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Fra @andys kommentar ser det ud til, at MySQL 8.x.x har opdateret/erstattet auth_socket for caching_sha2_password . Jeg har ikke en systemopsætning med MySQL 8.x.x til at teste dette. Ovenstående trin skal dog hjælpe dig med at forstå problemet. Her er svaret:

En ændring fra og med MySQL 8.0.4 er, at det nye standardgodkendelsesplugin er 'caching_sha2_password'. Den nye 'YOUR_SYSTEM_USER' vil have dette autentificerings-plugin, og du kan logge ind fra Bash-skallen nu med "mysql -u YOUR_SYSTEM_USER -p" og angive adgangskoden til denne bruger ved prompten. Der er ikke noget behov for trinnet "OPDATERING bruger SET plugin".

For 8.0.4 standardgodkendelsespluginopdateringen, se https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/



  1. SQL Server JSON_Modify, hvordan opdateres alle?

  2. Hvordan simulerer man UNPIVOT i Access?

  3. Oracle - Hvilken TNS-navne-fil bruger jeg?

  4. Sådan stoppes/startes databasens postkø i SQL Server (T-SQL)