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 USER
comando).
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.
Respuestas:
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).
fuente