我很好奇,正在学习……这并不紧急
在运行 19 个数据库的生产服务器上,我输入了这个拼写错误
mysql -uroot-p[passwd]
^ omitted space
我很快就享受到了长达 12 秒的 Shark-Eats-Quint-Grade 心率升高:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
我已经确认这个打字错误是无害的**,但现在我很好奇它是如何产生输出而不是错误的。
我的 SQL-Fu 增长了,但还不够强大。我显然尝试对无意的用户进行身份验证root-ppasswd
,但由于没有将密码传递给 mysql,也没有现有的真实凭据,我预计命令会失败——这是否会产生一个新的理论数据库实例,等待永久写入的机会?
** 请允许我先发制人,强调过早按下 <enter> 键的危险性。是的——Hollowpoint 躲开了。
答案1
它将整个字符串视为用户名,并且无需密码,MySQL 客户端就会以匿名身份登录。
mysql -usomerandomstring
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| @localhost |
+----------------+
答案2
更新
我知道我会冒险在这里学到一些东西。:-)
不想妨碍对哈维的有用答案的赞成,但想向 SQL 新手们请教......
正如 harvey 所说,我曾遇到过匿名登录问题。我的手册中没有提到匿名用户——并不是说我在发帖前读完了它,甚至不知道要找什么,这就是为什么网络搜索很快就找到了 ServerFault。
我发现关于删除匿名登录的建议,即将在您附近的某个非工作日上映:
DELETE FROM mysql.user WHERE User='';