MySQL:我省略了一个空格——我做了什么?

MySQL:我省略了一个空格——我做了什么?

我很好奇,正在学习……这并不紧急

在运行 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='';

相关内容