根据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 |
+------------------+-----------+-------------------------------------------+
我删除了所有匿名帐户,以便用户表现在看起来像这样。(我正在使用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 |
+------------------+-----------+-------------------------------------------+
为什么我仍然可以不用用户名或密码登录测试系统?
我该怎么做才能防止任何不需要的用户登录?
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>
更新:我还发现我可以以root用户身份登录,而无需输入密码。
Update2:我发现这个问题有一些好的信息,但不能解决问题。
没有匿名用户。
mysql> select user,host,password from mysql.user where user='';
Empty set (0.00 sec)
我以登录root@localhost
。
mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
我没有默认密码,也没有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
更新3:
我尝试使用p执行这些步骤(steps应自动执行刷新权限)。我还手动刷新了特权,并尝试重新启动mysql。
Update4:
我也尝试过更改mysql的root密码和刷新权限。不用运气,我仍然可以以没有密码的任何用户身份登录。
另请参阅stackoverflow.com/q/7179894/632951
—
Pacerier,2015年