FOUT 1698 (28000): Toegang geweigerd voor gebruiker 'root'@'localhost'

Ik ben een nieuwe server aan het opzetten en blijf tegen dit probleem aanlopen.

Wanneer ik probeer in te loggen in de MySQL database met de root gebruiker, krijg ik de foutmelding:

ERROR 1698 (28000): Toegang geweigerd voor gebruiker 'root'@'localhost'

Het maakt niet uit of ik verbinding maak via de terminal(SSH), via PHPMyAdmin of een MySQL Client, bijv. Navicat. Ze falen allemaal.

Ik keek in de mysql.user tabel en krijg het volgende:

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

Zoals je kunt zien, zou root toegang moeten hebben.

De server is vrij eenvoudig, omdat ik dit al een tijdje probeer op te lossen...

Het draait Ubuntu 16.04.1 LTS met Apache, MySQL en PHP, zodat het websites kan hosten, en iRedMail 0.9.5-1, zodat het mail kan hosten.

Inloggen op de MySQL database werkt prima voordat ik iRedMail installeerde. Ik heb ook geprobeerd, alleen iRedMail te installeren, maar dan root, werkt ook'niet...

Als iemand me kan vertellen hoe ik mijn MySQL login probleem oplos of hoe ik iRedMail installeer, bovenop een bestaande MySQL installatie. En ja ik heb de Installatie Tips geprobeerd en ik kan'en die variabelen niet vinden in de config files.

Oplossing

Sommige systemen zoals Ubuntu, mysql gebruikt standaard de UNIX auth_socket plugin.

In principe betekent dit dat: db_users die het gebruiken, zullen worden "auth" door de systeemgebruiker credentias. U kunt zien of uw root gebruiker op deze manier is ingesteld door het volgende te doen:

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

Zoals u kunt zien in de query, gebruikt de root gebruiker de auth_socket plugin

Er zijn 2 manieren om dit op te lossen:

  1. Je kunt de root gebruiker de mysql_native_password plugin laten gebruiken
  2. U kunt een nieuwe db_user aanmaken met uw system_user (aanbevolen)

Optie 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

Optie 2: (vervang YOUR_SYSTEM_USER door de gebruikersnaam die u hebt)

$ 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

Onthoud dat als u optie #2 gebruikt, u verbinding moet maken met mysql als uw systeem gebruikersnaam (mysql -u YOUR_SYSTEM_USER)

Note: Op sommige systemen (bv. Debian stretch) 'auth_socket' plugin heet 'unix_socket', dus het corresponderende SQL commando zou moeten zijn: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Update: uit @andy's opmerking lijkt het erop dat mysql 8.x.x de auth_socket voor caching_sha2_password heeft bijgewerkt/vervangen Ik heb't een systeem setup met mysql 8.x.x om dit te testen, maar de bovenstaande stappen zouden je moeten helpen om het probleem te begrijpen. Hier's het antwoord:

Eén verandering vanaf MySQL 8.0.4 is dat de nieuwe standaard authenticatie plugin is 'caching_sha2_password'. De nieuwe 'YOUR_SYSTEM_USER' zal deze auth plugin hebben en je kunt nu inloggen vanuit de bash shell met "mysql -u YOUR_SYSTEM_USER -p" en geef het wachtwoord voor deze gebruiker op de prompt. De "UPDATE user SET plugin" stap is niet meer nodig. Voor de 8.0.4 standaard auth plugin update zie, https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

Commentaren (23)

Ik zou willen voorstellen om de Mysql verbinding te verwijderen -

UPDATE-Dit is voor Mysql versie 5.5, als uw versie anders is, verander de eerste regel dienovereenkomstig

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

En installeer opnieuw, maar stel deze keer zelf een root wachtwoord in. Dit zal een hoop moeite besparen.

sudo apt-get update
sudo apt-get install mysql-server
Commentaren (3)

U wilt toegang tot MySQL met root gebruiker maar u'geeft niet het juiste wachtwoord aan root's.

Als u een nieuw wachtwoord voor root** moet instellen, MySQL's site heeft geweldige documentatie over hoe dat te doen: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Ik zal het proces hier niet laten zien omdat MySql documentatie op de bovenstaande link het duidelijk en beknopt is.

Commentaren (3)