Uživatelé, kteří se s tímto chováním setkávají v novějších verzích MySQL/MariaDB (např. Debian Stretch atd.), by si měli být vědomi toho, že v tabulce mysql.user je sloupec nazvaný 'plugin'. Pokud je povolen plugin 'unix_socket', bude se root moci přihlásit pomocí příkazového řádku bez nutnosti zadání hesla. Ostatní přihlašovací mechanismy budou deaktivovány.
Chcete-li zkontrolovat, zda je tomu tak:
SELECT host, user, password, plugin FROM mysql.user;
což by mělo vrátit něco takového (se zapnutým unix_socket):
+-----------+------+--------------------------+-------------+
| host | user | password | plugin |
+-----------+------+--------------------------+-------------+
| localhost | root | <redacted_password_hash> | unix_socket |
+-----------+------+--------------------------+-------------+
Chcete-li to zakázat a vyžadovat, aby root používal heslo:
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
Poznámka: Jak poznamenal @marioivangf (v komentáři) v novějších verzích MySQL (např. 5.7.x), možná budete muset nastavit plugin na 'mysql_native_password' (spíše než prázdný).
Poté restartujte:
service mysql restart
Problém vyřešen!:
[email protected] ~# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Zdroj:https://stackoverflow.com/a/44301734/3363571 Velké díky @SakuraKinomoto (prosím, hlasujte pro jeho odpověď, pokud to považujete za užitečné).