После установки пароля root почему MYSQL все еще позволяет мне входить без пароля?

10

После установки пароля root почему MYSQL все еще позволяет мне входить без пароля из командной строки? Я могу напечатать "mysql" в приглашении root unix, и он не запрашивает пароль и все еще разрешает мне доступ с правами root. Я не понимаю, почему «mysql -u root» СЕЙЧАС не запрашивает у меня пароль, который я установил в учетной записи.

Кроме того, я не могу войти в mysql с удаленной машины как «root». Разве я не настроил это правильно ниже? Я получаю сообщение об ошибке: «Хост… не разрешено подключаться к этому серверу MySQL. Разве я не настроил его для«% »?

Вот моя таблица пользователей:

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
источник

Ответы:

4

Похоже, пароль установлен на 'root'@'localhost'входе пользователя, но не на 'root'@'%'входе; На этом основании будет разрешена аутентификация без пароля.

В целях безопасности, пересмотрите возможность разрешения root-доступа из любого места. Если вам это нужно, просто избавьтесь от спецификаций localhost:

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

И установите пароль для 'root'@'%'пользователя:

set password for 'root'@'%' = password('passwordhere');
Шейн Мэдден
источник
Это было ВСЕ, что мне было нужно, а затем немного. Спасибо. Я не был уверен, что безопасно удалить или не безопасно, и вы ответили на мой вопрос. Отличный ответ. :-)
djangofan
4

Ну, ответ правильный в этой таблице - вам нужно удалить «корневые» строки, в которых нет пароля.

Кроме того, похоже, что вы разрешаете соединения из любого места (?!?!), Когда не используете пользователя или пароль. Наверное, плохая идея. Я бы сделал что-то вроде:

mysql> use mysql;
mysql> delete from user where password = "";
EEAA
источник
2

Не забудьте ПРОПУСТИТЬ ПРИВИЛЕГИИ, иначе вы можете войти без пароля.

tgunr
источник