NAPAKA 1698 (28000): Uporabnik 'root'@'localhost'

Vzpostavljam nov strežnik in vedno znova naletim na to težavo.

Ko se poskušam prijaviti v podatkovno zbirko MySQL z uporabnikom root, dobim napako:

ERROR 1698 (28000): Uporabniku 'root'@'localhost'

Ni pomembno, ali se povežem prek terminala (SSH), PHPMyAdmina ali odjemalca MySQL, npr. Navicat. Vsi so neuspešni.

Pogledal sem v tabelo mysql.user in dobil naslednje:

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

Kot lahko vidite, bi moral imeti root dostop.

Strežnik je precej preprost, saj sem to poskušal odpraviti že nekaj časa.

Na njem teče Ubuntu 16.04.1 LTS z Apache, MySQL in PHP, da lahko gosti spletne strani, in iRedMail 0.9.5-1, da lahko gosti pošto.

Prijava v podatkovno zbirko MySQL deluje brez težav, preden namestim iRedMail. Poskusil sem tudi, samo namestiti iRedMail, ampak potem root, tudi ne deluje...

Če mi lahko kdo pove, kako naj odpravim težavo s prijavo v MySQL ali kako naj namestim iRedMail na obstoječo namestitev MySQL. In ja, poskusil sem Nasveti za namestitev in ne morem najti teh spremenljivk v konfiguracijskih datotekah.

Rešitev

V nekaterih sistemih, kot je Ubuntu, mysql privzeto uporablja UNIX auth_socket plugin.

V osnovi to pomeni, da: db_uporabniki, ki ga uporabljajo, bodo "avtentificirani" z predpisi sistemskega uporabnika. Če je vaš uporabnik root nastavljen na tak način, lahko preverite naslednje:

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

Kot lahko vidite v poizvedbi, uporabnik root uporablja vtičnik auth_socket.

To lahko rešite na dva načina:

  1. Uporabnika root lahko nastavite, da uporablja vtičnik mysql_native_password.
  2. Ustvarite lahko novega db_user z system_user (priporočljivo).

Opcija 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

Opcija 2: (zamenjajte YOUR_SYSTEM_USER z uporabniškim imenom, ki ga imate)

$ 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

Ne pozabite, da se boste morali, če uporabite možnost #2, povezati z mysql kot sistemsko uporabniško ime (mysql -u YOUR_SYSTEM_USER)

Note: V nekaterih sistemih (npr. Debian stretch) se vtičnik 'auth_socket' imenuje 'unix_socket', zato mora biti ustrezen ukaz SQL: Uporabnik: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Posodobitev: iz komentarja @andy'se zdi, da je mysql 8.x.x posodobil/zamenjal auth_socket za caching_sha2_password Nimam nastavljenega sistema z mysql 8.x.x, da bi to preizkusil, vendar bi vam morali zgornji koraki pomagati razumeti težavo. Tukaj je odgovor:

Ena od sprememb v MySQL 8.0.4 je, da je novi privzeti vtičnik za preverjanje pristnosti 'caching_sha2_password'. Novi 'YOUR_SYSTEM_USER' bo imel ta vtičnik auth in zdaj se lahko prijavite iz lupine bash z "mysql -u YOUR_SYSTEM_USER -p" in na poziv navedete geslo za tega uporabnika. Korak "UPDATE user SET plugin" ni potreben. Za posodobitev vtičnika za privzeto avtentikacijo v različici 8.0.4 glejte: https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

Komentarji (23)

Predlagam, da odstranite povezavo Mysql -

UPDATE - to velja za različico Mysql 5.5, če je vaša različica drugačna, ustrezno spremenite prvo vrstico

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

In znova namestite, vendar tokrat sami nastavite korensko geslo. To vam bo prihranilo veliko truda.

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

Do MySQL želite dostopati z uporabnikom root, vendar mu ne posredujete pravilnega gesla.

Če morate nastaviti novo geslo za root, je na spletnem mestu MySQL na voljo odlična dokumentacija o tem, kako to storiti: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html.

Postopka tukaj ne bom prikazal, ker je dokumentacija MySQLql na zgornji povezavi jasna in jedrnata.

Komentarji (3)