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

zed*_*lon 0 mysql

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

在运行 19 个数据库的生产服务器上,我输入了这个错字

mysql -uroot-p[passwd]
            ^ omitted space
Run Code Online (Sandbox Code Playgroud)

我很快就享受了长达 12 秒的 Shark-Eats-Quint-Grade 心率提升:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
Run Code Online (Sandbox Code Playgroud)

我已经确认这个错字是无害的**,但现在很好奇这是如何产生输出而不是错误的。

我的 SQL-Fu 增长但还不是很强大。我显然尝试对无意的用户进行身份验证root-ppasswd,但是既没有将密码传递给 mysql,也没有将现有的真实凭据传递给我,我预计该命令会失败——这是否产生了一个新的理论数据库实例,等待它被永久写入的机会?

** 请允许我先行阻止那些倾向于强调过早使用 <enter> 键的危险的人。是的——空洞躲过了。

har*_*vey 5

它将整个字符串视为用户名,并且没有密码,MySQL 客户端将您以匿名身份登录。

mysql -usomerandomstring
mysql> SELECT CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| @localhost     |
+----------------+
Run Code Online (Sandbox Code Playgroud)

  • 来自手册:默认情况下,MySQL 安装有一个匿名用户,允许任何人登录 MySQL,而无需为他们创建用户帐户。这仅用于测试,并使安装更顺畅。您应该在进入生产环境之前删除它们。 (2认同)