Użytkownicy napotykający to zachowanie w nowszych wersjach MySQL/MariaDB (np. Debian Stretch itp.) powinni wiedzieć, że w tabeli mysql.user znajduje się kolumna o nazwie 'plugin'. Jeśli wtyczka 'unix_socket' jest włączona, root będzie mógł zalogować się za pomocą wiersza poleceń bez konieczności podawania hasła. Inne mechanizmy logowania zostaną wyłączone.
Aby sprawdzić, czy tak jest:
SELECT host, user, password, plugin FROM mysql.user;
które powinno zwrócić coś takiego (z włączonym unix_socket):
+-----------+------+--------------------------+-------------+
| host | user | password | plugin |
+-----------+------+--------------------------+-------------+
| localhost | root | <redacted_password_hash> | unix_socket |
+-----------+------+--------------------------+-------------+
Aby to wyłączyć i wymagać od administratora używania hasła:
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
Uwaga: Jak zauważył @marioivangf (w komentarzu) w nowszych wersjach MySQL (np. 5.7.x) może być konieczne ustawienie wtyczki na „mysql_native_password” (zamiast pustej).
Następnie uruchom ponownie:
service mysql restart
Problem rozwiązany!:
[email protected] ~# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Źródło:https://stackoverflow.com/a/44301734/3363571 Wielkie podziękowania dla @SakuraKinomoto (proszę głosować na jego odpowiedź, jeśli uznasz to za przydatne).