Dlaczego po ustawieniu hasła roota MYSQL nadal pozwala mi się zalogować bez hasła?

10

Po ustawieniu hasła roota, dlaczego MYSQL nadal pozwala mi się zalogować bez hasła z wiersza poleceń? Mogę wpisać „mysql” w wierszu polecenia root unix, który prosi o brak hasła i nadal pozwala mi na dostęp do roota. Nie rozumiem, dlaczego „root mysql -u root” nie pyta TERAZ o hasło ustawione na koncie.

Ponadto nie mogę zalogować się do mysql ze zdalnego komputera jako „root”. Czy nie skonfigurowałem go poprawnie poniżej? Pojawia się błąd: „Host ... nie może połączyć się z tym serwerem MySQL. Czy nie skonfigurowałem go dla '%'?

Oto moja tabela użytkowników:

mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| %         | root |                                           |
| 127.0.0.1 | root |                                           |
| ::1       | root |                                           |
| localhost |      |                                           |
| %         |      |                                           |
+-----------+------+-------------------------------------------+
6 rows in set (0.00 sec)
djangofan
źródło

Odpowiedzi:

4

Wygląda na to, że hasło jest ustawione we 'root'@'localhost'wpisie użytkownika, ale nie we 'root'@'%'wpisie; Na tej podstawie dozwolone będzie uwierzytelnianie bez hasła.

Ze względów bezpieczeństwa ponownie rozważ zezwolenie na dostęp do konta root z dowolnego miejsca. Jeśli potrzebujesz, po prostu pozbądź się specyfikacji localhost:

drop user 'root'@'localhost';
drop user 'root'@'127.0.0.1';
drop user 'root'@'::1';

I ustaw hasło dla 'root'@'%'użytkownika:

set password for 'root'@'%' = password('passwordhere');
Shane Madden
źródło
To było WSZYSTKO, czego potrzebowałem, a potem jeszcze trochę. Dzięki. Nie byłem pewien, co można bezpiecznie usunąć, a co nie, a ty odpowiedziałeś na moje pytanie. Świetna odpowiedź. :-)
djangofan,
4

Cóż, odpowiedź jest odpowiednia w tej tabeli - musisz usunąć linie „root”, które nie zawierają hasła.

Wygląda również na to, że zezwalasz na połączenia z dowolnego miejsca (?!?!), Gdy nie używasz żadnego użytkownika ani hasła. Prawdopodobnie zły pomysł. Zrobiłbym coś takiego:

mysql> use mysql;
mysql> delete from user where password = "";
EEAA
źródło
2

Nie zapomnij o FLUSH PRIVILEGES, bo nadal możesz się zalogować bez hasła.

tgunr
źródło