如何禁用匿名登录?

spu*_*der 9 mysql security

根据MySQL 文档,您可以通过添加密码或删除匿名帐户来强化 MySQL 服务器。

如果您想防止客户端在没有密码的情况下作为匿名用户进行连接,您应该为每个匿名帐户分配一个密码,或者删除这些帐户。

在强化之前,我的用户表看起来像这样。

mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user             | host      | password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| root             | gitlab    |                                           |
| root             | 127.0.0.1 |                                           |
| root             | ::1       |                                           |
|                  | localhost |                                           |
|                  | gitlab    |                                           |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser           | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我已经删除了所有匿名帐户,因此用户表现在看起来像这样。(我使用 puppet 来管理用户,但 puppet 有效地执行DROP USER命令)。

mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user             | host      | password                                  |
+------------------+-----------+-------------------------------------------+
| root             | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser           | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

为什么我仍然可以在没有用户名或密码的情况下登录我的测试系统?
我需要做什么来防止任何不需要的用户登录?

root@gitlab:~# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 98
Server version: 5.5.32-0ubuntu0.12.04.1 (Ubuntu)
....
mysql> 
Run Code Online (Sandbox Code Playgroud)

更新:我还刚刚发现我可以以 root 身份登录,而无需输入密码。

更新2:我发现这个问题有一些很好的信息,但没有解决问题。

没有匿名用户。

mysql> select user,host,password from mysql.user where user='';
Empty set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我以root@localhost.

mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+ 
Run Code Online (Sandbox Code Playgroud)

我没有默认密码,或者 my.cnf 中定义的 skip-grant-tables

root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'skip-grant-tables'|wc -l
0
root@gitlab:~# cat /etc/mysql/my.cnf |grep -i 'pass'|wc -l
0
Run Code Online (Sandbox Code Playgroud)

更新3

我曾尝试使用 puppet 执行这些步骤(应该自动执行刷新权限)。我还手动刷新了权限,并尝试重新启动 mysql。

更新 4
我也尝试过更改 mysql 根密码和刷新权限。不走运,我仍然可以在没有密码的情况下以任何用户身份登录。

spu*_*der 6

我想到了。虽然 /etc/mysql/my.cnf 没有存储密码密钥对,但在 /root/.my.cnf 中存储了一个密码。

一旦我在 /root/.my.cnf 中注释掉密码,我就不能在没有密码的情况下登录(这是我所期望的)。