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

ERRORE 1698 (28000):accesso negato per l'utente 'root'@'localhost'

Alcuni sistemi come Ubuntu, MySQL utilizza Plugin auth_socket di UNIX per impostazione predefinita.

Fondamentalmente significa che:db_users che lo utilizza, sarà "autenticato" dalle credenziali dell'utente di sistema. Puoi vedere se il tuo root l'utente è configurato in questo modo effettuando le seguenti operazioni:

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

Come puoi vedere nella query, la root l'utente sta usando auth_socket plug-in.

Ci sono due modi per risolverlo:

  1. Puoi impostare la root utente di utilizzare la mysql_native_password plug-in
  2. Puoi creare un nuovo db_user con te system_user (consigliato)

Opzione 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

Opzione 2: (sostituisci YOUR_SYSTEM_USER con il nome utente che hai)

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

Ricorda che se usi l'opzione n. 2 dovrai connetterti a MySQL come nome utente di sistema (mysql -u YOUR_SYSTEM_USER ).

Nota: Su alcuni sistemi (ad es. Debian 9 (Stretch)) il plugin 'auth_socket' si chiama 'unix_socket' , quindi il comando SQL corrispondente dovrebbe essere:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Dal commento di @andy sembra che MySQL 8.x.x abbia aggiornato/sostituito auth_socket per caching_sha2_password . Non ho una configurazione di sistema con MySQL 8.x.x per testarlo. Tuttavia, i passaggi precedenti dovrebbero aiutarti a comprendere il problema. Ecco la risposta:

Una modifica a partire da MySQL 8.0.4 è che il nuovo plug-in di autenticazione predefinito è 'caching_sha2_password'. Il nuovo "YOUR_SYSTEM_USER" avrà questo plug-in di autenticazione e puoi accedere dalla shell Bash ora con "mysql -u YOUR_SYSTEM_USER -p" e fornire la password per questo utente al prompt. Non è necessario il passaggio "UPDATE user SET plug-in".

Per l'aggiornamento del plug-in di autenticazione predefinito 8.0.4, vedere https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/