sql >> Databasteknik >  >> RDS >> Mysql

Hur inaktiverar man MySQL root-inloggningar när inget lösenord tillhandahålls?

Användare som stöter på detta beteende i nyare versioner av MySQL/MariaDB (t.ex. Debian Stretch, etc) bör vara medvetna om att det i tabellen mysql.user finns en kolumn som heter 'plugin'. Om insticksprogrammet 'unix_socket' är aktiverat, kommer root att kunna logga in via kommandoraden utan att behöva ett lösenord. Andra inloggningsmekanismer kommer att inaktiveras.

Så här kontrollerar du om så är fallet:

SELECT host, user, password, plugin FROM mysql.user;

som borde returnera något i stil med detta (med unix_socket aktiverat):

+-----------+------+--------------------------+-------------+
| host      | user | password                 | plugin      |
+-----------+------+--------------------------+-------------+
| localhost | root | <redacted_password_hash> | unix_socket |
+-----------+------+--------------------------+-------------+

För att inaktivera det och kräva att root använder ett lösenord:

UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

Obs! Som noterat av @marioivangf (i en kommentar) i nyare versioner av MySQL (t.ex. 5.7.x) kan du behöva ställa in plugin-programmet till 'mysql_native_password' (istället för tomt).

Starta sedan om:

service mysql restart

Problem fixat!:

[email protected] ~# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Källa:https://stackoverflow.com/a/44301734/3363571 Stort tack till @SakuraKinomoto (vänligen gå upp och rösta på hans svar om du tycker att detta är användbart).



  1. INET_ATON() och INET_NTOA() i PHP?

  2. Insamlingsmetod:Utöka procedur i Oracle Database

  3. Hur man förvandlar en json-array till rader i postgres

  4. ini_set, set_time_limit, (max_execution_time) - fungerar inte