Recentemente, postei uma resposta a uma pergunta sobre mysql.db .
Então, comecei a pensar que deveria fazer a todos esta pergunta:
Tenho notado há anos que, após a instalação do MySQL 5.0+, mysql.db
é preenchido com duas entradas que permitem que os bancos de dados de teste sejam acessados por usuários anônimos.
Você pode vê-lo executando esta consulta:
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)
Essas entradas mysql.db
representam um risco de segurança e, em caso afirmativo, por que são adicionadas por padrão a uma nova instalação?
ATUALIZAÇÃO 2013-06-14 10:13 EDT
Esta manhã, alguém votou negativamente na minha pergunta, o que eu realmente não entendo. À luz desse evento, aqui está o motivo pelo qual dediquei um tempo para fazer uma refutação:
Eu instalei o MySQL 5.6.12 para um cliente esta semana em seu Staging Cluster. Decidi verificar se esse ainda era um problema contínuo:
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>
Adivinha? Isso ainda é um problema até hoje !!!
MORAL DA HISTÓRIA: Verifique mysql.db
imediatamente após a instalação e remova os logins anônimos e apague essas entradas de teste mysql.db
sem demora.