Jeg setter opp en ny server og støter stadig på dette problemet.
Når jeg prøver å logge på MySQL-databasen med root-brukeren, får jeg feilen:
FEIL 1698 (28000): Tilgang nektet for brukeren 'root'@'localhost'
Det spiller ingen rolle om jeg kobler til via terminalen (SSH), via PHPMyAdmin eller en MySQL-klient, for eksempel Navicat. De mislykkes alle sammen.
Jeg så i mysql.user-tabellen og får følgende:
+------------------+-------------------+
| 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 |
+------------------+-------------------+
Som du kan se, bør root ha tilgang.
Serveren er ganske enkel, ettersom jeg har prøvd å feilsøke dette en stund nå...
Den kjører Ubuntu 16.04.1 LTS med Apache, MySQL og PHP, slik at den kan være vert for nettsteder, og iRedMail 0.9.5-1, slik at den kan være vert for e-post.
Innlogging i MySQL-databasen fungerer fint før jeg installerer iRedMail. Jeg prøvde også, bare å installere iRedMail, men så root, fungerer heller ikke ...
Hvis noen kan fortelle meg hvordan jeg løser MySQL-påloggingsproblemet mitt eller hvordan jeg installerer iRedMail, på toppen av en eksisterende MySQL-installasjon. Og ja, jeg prøvde Installasjonstips og jeg kan ikke finne disse variablene i konfigurasjonsfilene.
Noen systemer som Ubuntu, mysql bruker som standard UNIX auth_socket plugin.
I utgangspunktet betyr det at: db_users som bruker det, vil være "auth" av systemets brukerinformasjon. Du kan se om din root
-bruker er satt opp slik ved å gjøre følgende:
$ 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 |
+------------------+-----------------------+
Som du kan se i spørringen, bruker root
-brukeren auth_socket
-plugin-modulen.
Det er to måter å løse dette på:
mysql_native_password
.db_user
med system_user
(anbefales).Alternativ 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
Alternativ 2: (erstatt YOUR_SYSTEM_USER med det brukernavnet 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 '';
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
Husk at hvis du bruker alternativ 2, må du koble til mysql som ditt systembrukernavn (mysql -u YOUR_SYSTEM_USER
).
Merk: På noen systemer (f.eks. Debian stretch) heter 'auth_socket' plugin 'unix_socket', så den tilsvarende SQL-kommandoen skal være: UPDATE user SET plugin= 'unix_socket' WHERE User= 'YOUR_SYSTEM_USER';;
Oppdatering:
fra @andys kommentar ser det ut til at mysql 8.x.x oppdaterte / erstattet auth_socket
for caching_sha2_password
Jeg har ikke et systemoppsett med mysql 8.x.x for å teste dette, men trinnene ovenfor bør hjelpe deg med å forstå problemet. Her er svaret:
En endring fra og med MySQL 8.0.4 er at den nye standard autentiseringspluginen er 'caching_sha2_password'. Den nye 'YOUR_SYSTEM_USER' vil ha denne auth-pluginen, og du kan logge inn fra bash-skallet nå med "mysql -u YOUR_SYSTEM_USER -p " og oppgi passordet for denne brukeren på ledeteksten. Det er ikke behov for trinnet "UPDATE user SET plugin". For 8.0.4 standard auth-plugin-oppdatering, se https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/.
Jeg vil foreslå å fjerne Mysql-forbindelsen -
OPPDATERING-Dette er for Mysql versjon 5.5, hvis din versjon er annerledes, vennligst endre den første linjen tilsvarende
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
Og installer igjen, men denne gangen angir du et root-passord selv. Dette vil spare mye arbeid.
sudo apt-get update
sudo apt-get install mysql-server
Du vil ha tilgang til MySQL med root-bruker, men du oppgir ikke root sitt riktige passord.
Hvis du trenger å angi et nytt passord for root, har MySQLs nettsted god dokumentasjon om hvordan du gjør det: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
Jeg vil ikke vise prosessen her fordi MySql-dokumentasjonen på lenken ovenfor er klar og konsis .