De acordo com a documentação do MySQL , você pode proteger um servidor MySQL adicionando senhas ou removendo as contas anônimas.
Se quiser impedir que os clientes se conectem como usuários anônimos sem uma senha, atribua uma senha a cada conta anônima ou remova as contas.
Antes de endurecer, minha tabela de usuários era assim.
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 |
+------------------+-----------+-------------------------------------------+
Eu removi todas as contas anônimas, para que a tabela de usuários agora fique assim. (Estou usando o fantoche para gerenciar os usuários, mas o fantoche efetivamente executa um DROP USERcomando).
mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
Por que ainda consigo fazer login no meu sistema de teste sem nome de usuário ou senha?
O que preciso fazer para impedir que usuários indesejados façam login?
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>
Atualização : Acabei de descobrir que posso fazer login como root, sem inserir uma senha.
Update2 : Encontrei esta pergunta que contém algumas informações boas, mas não resolve o problema.
Não há usuários anônimos.
mysql> select user,host,password from mysql.user where user='';
Empty set (0.00 sec)
Eu entro como root@localhost.
mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
Eu não tenho uma senha padrão ou skip-grant-tables definidas em my.cnf
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
Update3 :
Eu tentei executar essas etapas com o fantoche, (que deve executar privilégios de liberação automaticamente). Também limpei manualmente os privilégios e também tentei reiniciar o mysql.
Update4 :
Eu também tentei alterar a senha root do mysql e os privilégios liberados. Sem sorte, ainda posso fazer login como qualquer usuário sem uma senha.