我已经将我的 MySQL 数据库配置为要求所有用户都输入密码,甚至是机器本身的 root 用户。
现在我发现我的数据库中有空的用户
重现:mysql -u root -p
然后use mysql;
&select * from user;
它给了我2个条目,一个包含“localhost”和用户<empty>,另一个包含机器的主机名和<empty>。
现在我尝试使用 访问该帐户mysql -u ' '
(是的,这是正确的,在 ' 之间留一个空格),并且我无需密码即可登录。用户“只能”看到 information_schema 和 test,这是默认创建的两个数据库。他无权访问 mysql 或任何其他自定义创建的数据库。
我已经将此用户的密码更改为我不会告诉你的内容
mysql -u root -p
use mysql;
UPDATE mysql.user SET Password=PASSWORD('thisisasecretpassword') WHERE USER='root';
FLUSH PRIVILEGES;
现在我的问题是:
是否有任何 MySQL 服务器容易受到此条目的攻击?
攻击者能否突破该帐户或两个默认数据库?
我应该用密码保护这些用户吗?或者我可以删除它们吗?它们是 MySQL 内部某些东西所必需的吗?
答案1
这些是匿名用户,因此不需要密码。所有安装都会默认创建这些密码。我不确定为什么要这样做。
您可以为它们设置密码或将其删除。从https://dev.mysql.com/doc/refman/5.6/en/default-privileges.html:
如果您想阻止客户端以没有密码的匿名用户身份进行连接,您应该为每个匿名帐户分配一个密码,或者删除这些帐户。
似乎是这个的重复:MySQL 5.5.16 允许匿名连接
答案2
用于mysql_secure_installation
删除匿名用户、测试数据库以及防止使用root
用户进行远程连接。
http://dev.mysql.com/doc/refman/5.0/en/mysql-secure-installation.html