Я настроил свою базу данных MySQL так, чтобы требовать пароли для всех пользователей, даже для root с самого компьютера.
Теперь я обнаружил, что в моей базе данных есть пустые пользователи.
Воспроизвести: mysql -u root -p
а потом use mysql;
& select * from user;
Он дает мне 2 записи, одну с "localhost" и пользователем <empty>, а другую с именем хоста машины и <empty>.
Теперь я попытался получить доступ к учетной записи с помощью mysql -u ' '
(да, это правильно, оставьте пробел между «вещами») и я вхожу в систему без пароля. Пользователь может "только" видеть информацию_schema и тестировать две базы данных, созданные по умолчанию. У него нет доступа к mysql или другим пользовательским базам данных.
Я уже изменил пароль этого пользователя на то, о чем не скажу
mysql -u root -p
use mysql;
UPDATE mysql.user SET Password=PASSWORD('thisisasecretpassword') WHERE USER='root';
FLUSH PRIVILEGES;
Теперь мои вопросы:
Уязвим ли какой-либо сервер MySQL для атаки с этой записью?
Может ли злоумышленник взломать эту учетную запись или две базы данных по умолчанию?
Следует ли мне защищать паролем этих пользователей или я могу их удалить? Требуются ли они для некоторых внутренних вещей MySQL?
Это анонимные пользователи, поэтому пароли не нужны. Они создаются по умолчанию на всех установках. Я не знаю, почему это так.
Вы можете установить для них пароль или удалить их. Из https://dev.mysql.com/doc/refman/5.6/en/default-privileges.html:
Если вы хотите запретить клиентам подключаться как анонимные пользователи без пароля, вам следует либо назначить пароль для каждой анонимной учетной записи, либо удалить учетные записи.
Кажется, это дубликат этого: MySQL 5.5.16 позволяет анонимные подключения
Использовать mysql_secure_installation
для удаления анонимных пользователей, тестирования баз данных, а также предотвращения удаленного подключения с помощью root
пользователь.
http://dev.mysql.com/doc/refman/5.0/en/mysql-secure-installation.html