Después de configurar la contraseña de root, ¿por qué MYSQL todavía me permite iniciar sesión sin contraseña?

10

Después de configurar la contraseña de root, ¿por qué MYSQL todavía me permite iniciar sesión sin una contraseña desde la línea de comandos? Puedo escribir "mysql" en el indicador de raíz de Unix y no pide contraseña y aún me permite el acceso de root. No entiendo por qué "mysql -u root" AHORA no me pide la contraseña que configuré en la cuenta.

Además, no puedo iniciar sesión en mysql desde una máquina remota como 'root'. ¿No lo configuré correctamente a continuación? Recibo el error: "Host ... no tiene permiso para conectarse a este servidor MySQL. ¿No lo configuré para '%'?

Aquí está mi tabla de usuario:

mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 |
| %         | root |                                           |
| 127.0.0.1 | root |                                           |
| ::1       | root |                                           |
| localhost |      |                                           |
| %         |      |                                           |
+-----------+------+-------------------------------------------+
6 rows in set (0.00 sec)
djangofan
fuente

Respuestas:

4

Parece que la contraseña está establecida en la 'root'@'localhost'entrada del usuario, pero no en la 'root'@'%'entrada; la autenticación sin contraseña se permitiría en función de eso.

Por razones de seguridad, reconsidere permitir el acceso de root desde cualquier lugar. Si lo necesita, elimine las especificaciones de localhost:

drop user 'root'@'localhost';
drop user 'root'@'127.0.0.1';
drop user 'root'@'::1';

Y establezca la contraseña para el 'root'@'%'usuario:

set password for 'root'@'%' = password('passwordhere');
Shane Madden
fuente
Eso era TODO lo que necesitaba y algo más. Gracias. No estaba seguro de lo que era seguro eliminar o no, y usted respondió mi pregunta. Gran respuesta. :-)
djangofan
4

Bueno, la respuesta está en esa tabla: debe eliminar las líneas "raíz" que no tienen una lista de contraseñas.

Además, parece que permite conexiones desde cualquier lugar (?!?!) Cuando no se utiliza ningún usuario o pase. Probablemente sea una mala idea. Haría algo como:

mysql> use mysql;
mysql> delete from user where password = "";
EEAA
fuente
2

No olvides DESCARGAR PRIVILEGIOS o aún puedes iniciar sesión sin contraseña.

tgunr
fuente