显然,我可以连接到 MySQL(至少从我的本地主机)而无需提供任何用户名或密码。我甚至可以将任何内容作为用户名,只要密码为空。我可以访问information_schema
和test
数据库。我可以创建表。如果我运行SELECT USER()
它,它会返回正确的值 randomstring@localhost,其中随机字符串是我连接时用作用户名的任何内容。
该mysql.user
表包含root @ localhost,[电子邮件保护]、@localhost 和 pma@localhost。我手动为所有记录设置了加密密码(UPDATE user SET password=...
),只有 root 具有任何权限,其他两个记录具有“N”表示所有权限。带有空用户名的记录看起来很可疑,但我认为它与此无关,我认为它从一开始就在那里。
更糟糕的是,如果我添加一个有密码的用户,我只能使用空字符串作为密码进行连接(就像我输入任何内容作为用户名一样)。如果我尝试使用我创建的用户名和创建时提供的密码进行连接(CREATE USER .. IDENTIFIED BY ..
),则无法正常工作。
有人知道哪里出了问题以及我该如何解决这个问题吗?
笔记:我正在使用 XAMPP 包提供的适用于 Windows 的 MySQL 5.5.16。
答案1
您只需删除匿名用户。
将来,运行 /usr/bin/mysql_secure_installation(RPM 安装中的位置)将提示您删除这些匿名用户。
默认情况下,MySQL 安装有一个匿名用户,允许任何人登录 MySQL,而无需为其创建用户帐户。这仅用于测试,并使安装过程更顺利一些。您应该在进入生产环境之前将其删除。
删除匿名用户?[Y/n] y...成功!
答案2
删除用户名为空的用户条目。这是原因。select user();
登录时使用以验证您以哪个用户身份登录。
看这里:
有些帐户是为匿名用户准备的。这些帐户的用户名是空的。匿名帐户没有密码,因此任何人都可以使用它们连接到 MySQL 服务器。