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

Jeg er ved at oprette en ny server og støder hele tiden på dette problem.

Når jeg forsøger at logge ind på MySQL-databasen med root-brugeren, får jeg fejlen:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Det er ligegyldigt om jeg forbinder via terminalen(SSH), via PHPMyAdmin eller en MySQL Client, f.eks. Navicat. De fejler alle sammen.

Jeg kiggede i tabellen mysql.user 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, burde root have adgang.

Serveren er ret enkel, da jeg har forsøgt at fejlfinde dette i et stykke tid nu...

Den kører Ubuntu 16.04.1 LTS med Apache, MySQL og PHP, så den kan hoste hjemmesider, og iRedMail 0.9.5-1, så den kan hoste mail.

Login på MySQL-databasen virker fint, før jeg installerer iRedMail. Jeg har også prøvet, bare at installere iRedMail, men så root, virker heller ikke...

Hvis nogen kunne fortælle mig, hvordan jeg løser mit MySQL login problem, eller hvordan jeg installerer iRedMail, ovenpå en eksisterende MySQL installation. Og ja jeg har prøvet Installationstips og jeg kan ikke finde disse variabler i config filerne.

Løsning

På nogle systemer som Ubuntu bruger mysql som standard UNIX auth_socket plugin.

Det betyder grundlæggende at: db_users using it, will be "auth" by _the system user credentias. 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 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 forespørgslen, bruger root-brugeren auth_socket-plugin'et

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

  1. Du kan indstille root-brugeren til at bruge plugin'et mysql_native_password
  2. Du kan oprette en ny db_user med din system_user (anbefales)

Mulighed 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

Option 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 '';
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 bruger mulighed #2 skal du forbinde til mysql som dit system brugernavn (mysql -u YOUR_SYSTEM_USER)

Note: På nogle systemer (f.eks. Debian stretch) hedder 'auth_socket' plugin 'unix_socket', så den tilsvarende SQL-kommando bør være: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

opdatering: fra @andy's kommentar synes at mysql 8.x.x opdateret/erstattet auth_socket for caching_sha2_password Jeg don't har et system opsætning med mysql 8.x.x til at teste dette, men trinene ovenfor bør hjælpe dig til at forstå problemet. Her's svaret:

En ændring fra MySQL 8.0.4 er, at det nye standardgodkendelsesplugin er 'caching_sha2_password'. Den nye 'YOUR_SYSTEM_USER' vil have dette auth-plugin, og du kan logge ind fra bash-shellen nu med "mysql -u YOUR_SYSTEM_USER -p" og angive adgangskoden for denne bruger på prompten. Der er ikke behov for "UPDATE user SET plugin" trin. For opdatering af standardauth-plugin 8.0.4 se: https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

Kommentarer (23)

Jeg vil foreslå at fjerne Mysql-forbindelsen -

UPDATE-Dette er for Mysql version 5.5,hvis din version er anderledes, skal du ændre den første linje i overensstemmelse hermed

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 igen, men denne gang skal du selv indstille et root password. Dette vil spare en masse arbejde.

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

Du ønsker at få adgang til MySQL med root-brugeren, men du har ikke angivet root's korrekte adgangskode.

Hvis du har brug for at indstille en ny adgangskode til root, har MySQL's websted god dokumentation om, hvordan du gør det: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Jeg viser ikke processen herinde fordi MySql dokumentation på ovenstående link er det'er klart og tydeligt.

Kommentarer (3)