然后,我开始想我应该问每个人这个问题:
多年来,我注意到在安装 MySQL 5.0+ 后,mysql.db
会填充两个条目,允许匿名用户访问测试数据库。
您可以通过运行以下查询来查看它:
mysql> select * from mysql.db where SUBSTR(db,1,4) = 'test'\G
*************************** 1. row ***************************
Host: %
Db: test
User:
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: N
Execute_priv: N
*************************** 2. row ***************************
Host: %
Db: test\_%
User:
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: N
Execute_priv: N
2 rows in set (0.00 sec)
这些条目是否mysql.db
存在安全风险,如果是,为什么默认将它们添加到新安装中?
更新 2013-06-14 10:13 EDT
今天早上有人否决了我的问题,我真的不明白。鉴于此事件,这就是我花时间进行反驳的原因:
本周我在他们的 Staging Cluster 中为一个客户端安装了 MySQL 5.6.12。我决定检查一下这是否仍然是一个持续存在的问题:
mysql> select version();
+------------+
| version() |
+------------+
| 5.6.12-log |
+------------+
1 row in set (0.00 sec)
mysql> select db,user,host from mysql.db where LEFT(db,4)='test';
+---------+------+------+
| db | user | host |
+---------+------+------+
| test | | % |
| test\_% | | % |
+---------+------+------+
2 rows in set (0.10 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2013-06-14 10:10:13 |
+---------------------+
1 row in set (0.00 sec)
mysql>
你猜怎么着?直到今天这仍然是个问题!!!
故事的寓意:请在安装后立即检查您的mysql.db
并删除匿名登录并立即删除这些测试条目mysql.db
。