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.
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:
mysql_native_password
.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/
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
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.