Secondo la documentazione di MySQL , è possibile rafforzare un server MySQL aggiungendo password o rimuovendo gli account anonimi.
Se si desidera impedire ai client di connettersi come utenti anonimi senza password, è necessario assegnare una password a ciascun account anonimo oppure rimuovere gli account.
Prima dell'indurimento, la tabella dei miei utenti appariva così.
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 |
+------------------+-----------+-------------------------------------------+
Ho rimosso tutti gli account anonimi, in modo che la tabella degli utenti ora assomigli a questo. (Sto usando il pupazzo per gestire gli utenti, ma il pupazzo esegue efficacemente un DROP USER
comando).
mysql> select user,host,password from mysql.user;
+------------------+-----------+-------------------------------------------+
| user | host | password |
+------------------+-----------+-------------------------------------------+
| root | localhost | *F3A2A51A9B0F2BE246XXXXXXXXXXXXXXXXXXXXXX |
| debian-sys-maint | localhost | *95C1BF709B26A5BAXXXXXXXXXXXXXXXXXXXXXXXX |
| myuser | localhost | *6C8989366EAF75BB6XXXXXXXXXXXXXXXXXXXXXXX |
+------------------+-----------+-------------------------------------------+
Perché sono ancora in grado di accedere al mio sistema di test senza un nome utente o una password?
Cosa devo fare per impedire a qualsiasi utente indesiderato di accedere?
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>
Aggiornamento : ho anche scoperto che posso accedere come root, senza inserire una password.
Aggiornamento2 : ho trovato questa domanda che contiene alcune buone informazioni, ma non risolve il problema.
Non ci sono utenti anonimi.
mysql> select user,host,password from mysql.user where user='';
Empty set (0.00 sec)
Accedo come root@localhost
.
mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
Non ho una password predefinita o skip-grant-tables definiti in 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
Aggiornamento 3 :
Ho provato a eseguire questi passaggi con Puppet (che dovrebbe eseguire automaticamente i privilegi di flush). Ho anche scaricato manualmente i privilegi e ho anche provato a riavviare mysql.
Update4 :
ho anche provato a cambiare la password di root mysql e i privilegi scaricati. Nessuna fortuna, posso ancora accedere come qualsiasi utente senza password.