¿Cómo deshabilita el inicio de sesión anónimo?

9

De acuerdo con la documentación de MySQL , puede fortalecer un servidor MySQL agregando contraseñas o eliminando las cuentas anónimas.

Si desea evitar que los clientes se conecten como usuarios anónimos sin contraseña, debe asignar una contraseña a cada cuenta anónima o eliminar las cuentas.

Antes de endurecer, mi tabla de usuarios se veía así.

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 |
+------------------+-----------+-------------------------------------------+

Eliminé todas las cuentas anónimas, de modo que la tabla de usuarios ahora se ve así. (Estoy usando puppet para administrar a los usuarios, pero puppet efectivamente ejecuta un 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 qué todavía puedo iniciar sesión en mi sistema de prueba sin un nombre de usuario o contraseña?
¿Qué debo hacer para evitar que los usuarios no deseados inicien sesión?

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> 

Actualización : también acabo de descubrir que puedo iniciar sesión como root, sin ingresar una contraseña.

Actualización2 : Encontré esta pregunta que tiene buena información, pero no resuelve el problema.

No hay usuarios anónimos.

mysql> select user,host,password from mysql.user where user='';
Empty set (0.00 sec)

Me conecto como root@localhost.

mysql> select USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+ 

No tengo una contraseña predeterminada o skip-grant-tables definidas en 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

Actualización3 :

He intentado realizar estos pasos con una marioneta (que debería realizar privilegios de descarga automáticamente). También he descargado manualmente los privilegios y también he intentado reiniciar mysql.

Actualización 4 :
También he intentado cambiar la contraseña de root de mysql y los privilegios vaciados. Sin suerte, todavía puedo iniciar sesión como cualquier usuario sin contraseña.

Spuder
fuente
Consulte también stackoverflow.com/q/7179894/632951
Pacerier el

Respuestas:

6

Me lo imaginé. Si bien /etc/mysql/my.cnf no tenía un par de claves de contraseña almacenado, había una contraseña almacenada en /root/.my.cnf.

Tan pronto como comenté la contraseña en /root/.my.cnf, no se me permitió iniciar sesión sin una contraseña (que es lo que esperaba).

Spuder
fuente