Sto installando un nuovo server e continuo a imbattermi in questo problema.
Quando cerco di accedere al database MySQL con l'utente root, ottengo l'errore: ERROR 1698 (28000): Accesso negato per l'utente 'root'@'localhost'
Non importa se mi connetto attraverso il terminale (SSH), attraverso PHPMyAdmin o un client MySQL, ad esempio Navicat. Falliscono tutti.
Ho guardato nella tabella mysql.user e ottengo quanto segue:
+------------------+-------------------+
| user | host |
+------------------+-------------------+
| root | % |
| root | 127.0.0.1 |
| amavisd | localhost |
| debian-sys-maint | localhost |
| iredadmin | localhost |
| iredapd | localhost |
| mysql.sys | localhost |
| phpmyadmin | localhost |
| root | localhost |
| roundcube | localhost |
| vmail | localhost |
| vmailadmin | localhost |
| amavisd | test4.folkmann.it |
| iredadmin | test4.folkmann.it |
| iredapd | test4.folkmann.it |
| roundcube | test4.folkmann.it |
| vmail | test4.folkmann.it |
| vmailadmin | test4.folkmann.it |
+------------------+-------------------+
Come potete vedere, root dovrebbe avere accesso.
Il server è abbastanza semplice, come ho cercato di risolvere questo problema per un po' di tempo.
Sta eseguendo Ubuntu 16.04.1 LTS con Apache, MySQL e PHP, in modo che possa ospitare siti web, e iRedMail 0.9.5-1, in modo che possa ospitare la posta.
Il login al database MySQL funziona bene prima di installare iRedMail. Ho anche provato, solo installando iRedMail, ma poi root, anche non funziona...
Se qualcuno potesse dirmi come risolvere il mio problema di login MySQL o come installare iRedMail, sopra un'installazione MySQL esistente. E sì, ho provato i Consigli per l'installazione e non riesco a trovare quelle variabili nei file di configurazione.
Su alcuni sistemi come Ubuntu, mysql usa di default il plugin auth_socket di UNIX.
Fondamentalmente significa che: Gli utenti db che lo usano, saranno "auth" da le credenziali dell'utente di sistema. Potete vedere se il vostro utente root
è impostato in questo modo facendo quanto segue:
$ sudo mysql -u root # I had to use "sudo" since is 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 si può vedere nella query, l'utente root
sta usando il plugin auth_socket
.
Ci sono 2 modi per risolvere questo problema:
db_user
con il vostro system_user
(consigliato)Opzione 1:__
$ sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ 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 '';
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;
$ service mysql restart
Ricordate che se usate l'opzione #2 dovrete connettervi a mysql come vostro nome utente di sistema (mysql -u YOUR_SYSTEM_USER
)
Nota: Su alcuni sistemi (ad esempio, Debian stretch) 'auth_socket' plugin è chiamato 'unix_socket', quindi il comando SQL corrispondente dovrebbe essere: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
Aggiornamento:
dal commento di @andy sembra che mysql 8.x.x abbia aggiornato/sostituito la auth_socket
per la caching_sha2_password
Non ho un sistema impostato con mysql 8.x.x per testare questo, tuttavia i passi sopra dovrebbero aiutare a capire il problema. Ecco la risposta:
Un cambiamento a partire da MySQL 8.0.4 è che il nuovo plugin di autenticazione predefinito è 'caching_sha2_password'. Il nuovo 'YOUR_SYSTEM_USER' avrà questo plugin di autenticazione e si può accedere dalla shell bash ora con "mysql -u YOUR_SYSTEM_USER -p" e fornire la password per questo utente sul prompt. Non c'è bisogno del passo "UPDATE user SET plugin". Per l'aggiornamento del plugin di default 8.0.4 si veda, https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/
Suggerirei di rimuovere la connessione Mysql -
UPDATE - Questo è per Mysql versione 5.5, se la tua versione è diversa, cambia la prima linea di conseguenza
sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean
E installate di nuovo, ma questa volta impostate voi stessi una password di root. Questo risparmierà un sacco di fatica.
sudo apt-get update
sudo apt-get install mysql-server
Vuoi accedere a MySQL con l'utente root ma non stai fornendo la password corretta di root.
Se hai bisogno di impostare una nuova password per root, il sito di MySQL ha un'ottima documentazione su come farlo: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
Io non mostrerò il processo qui perché la documentazione MySQL sul link sopra è chiara e concisa.