El proceso de instalación de MySQL se encarga también de crear y configurar la base de datos mysql que contiene las tablas de privilegios. En una instalación Windows esto se hace automáticamente y en un equipo Unix se genera con la utilidad mysql_install_db. Este programa en algunos entornos se ejecuta automáticamente y en otros manualmente.
El proceso de creación genera:
- Dos cuentas con el nombre de usuario root (el superusuario) y al principio sin contraseña y con todos los privilegios.
En Windows una cuenta root es para conexiones desde el equipo local y la otra es para la conexión desde cualquier equipo.
En Unix, ambos usuarios root son para conexiones de equipo local .
- Dos cuentas de usuario anónimo sin nombre ni contraseña.
En Windows uno de estos usuarios anónimos tiene los mismos poderes que el usuario root para las conexiones del equipo local. El otro tiene todos los privilegios para la base de datos test y todas las que comiencen con test y para cualquier equipo.
En Unix, ambos usuarios anónimos son para conexiones de equipo local y tienen todos los privilegios para trabajar sobre la base de datos test y todas las que comiencen con test .
Contraseña del usuario root
Por lo tanto, al inicio el usuario root no tiene contraseña y eso representa una brecha de seguridad muy importante que debemos resolver antes de poner el sistema a disposición de los desarrolladores o en producción.
La definición de una contraseña nos obligará luego a utilizar siempre la opción –password en los comandos que enviemos al servidor. Puede ser una incomodidad pero es imprescindible en todo entorno de red.
La definición de la contraseña del administrador root se realiza con el siguiente comando:
mysqladmin -u root --password mipsw
Siendo mipsw el valor de la nueva contraseña.
Por lo tanto, a partir de esta definición, cada vez que conectemos con el servidor como usuario root se nos pedirá la contraseña.
Trabajar siempre como usuario root representa un riesgo potencial, aún cuando ya le hayamos asignado una contraseña segura. Lo ideal es que además nos generemos una cuenta con los privilegios limitados para nuestras tareas habituales y que tengamos que apelar al usuario root sólo cuando sea estrictamente necesario. |
Otros modos para establecer la contraseña del usuario root
Además del uso de mysqladmin existen dos métodos más para realizar el cambio de contraseña:
- SET PASSWORD
- Sentencia UPDATE
Para utilizar SET PASSWORD es preciso conectar con el servidor como usuario root y ejecutar las siguientes sentencias:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mipsw'); mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('mipsw');
En Unix, la segunda sentencia se debe cambiar por esta:
mysql> SET PASSWORD FOR 'root'@'nombre-host' = PASSWORD('mipsw');
Siendo nombre-host el nombre del equipo y mipsw el valor de la contraseña elegida para el usuario root.
El segundo modo, se puede emplear de igual manera en Windows y en Unix, es mediante una sentencia UPDATE de SQL para actualizar directamente la tabla users:
mysql> UPDATE mysql.user SET Password = PASSWORD('mipsw') -> WHERE User = 'root';
Para actualizar los privilegios sin reiniciar el servidor se utiliza:
mysql> FLUSH PRIVILEGES;