Una parte del proceso de instalación de MySQL es configurar la
base de datos mysql
, que contiene las tablas
de permisos:
Las distribuciones para Windows contiene tablas de permisos preinicializadas que se instalan automáticamente.
En Unix, las tablas de permisos se llenan mediante el programa mysql_install_db. Algunos métodos de instalación ejecutan este programa en forma automática. Otros necesitan que sea ejecutado manualmente. Para más detalles, consulte Sección 2.9.2, “Pasos a seguir después de la instalación en Unix”.
Las tablas de permisos definen las cuentas de usuario MySQL iniciales y sus permisos de acceso. Estas cuentas tienen la siguiente configuración:
Se crean dos cuentas con el nombre de usuario
root
. Son cuentas de superusuario que
pueden realizar cualquier tarea. Inicialmente las cuentas
root
no tienen contraseñas, de forma que
cualquier persona puede conectarse al servidor MySQL como
root
sin una
contraseña y recibirá todos los privilegios.
En Windows, una cuenta root
sirve
para conectarse desde el ordenador local (localhost) y
la otra permite conectarse desde cualquier ordenador.
En Unix, ambas cuentas root
son para
conexiones desde el ordenador local (localhost). Las
conexiones deben establecerse desde el ordenador local
especificando el nombre de host
localhost
para una de las cuentas, o
el nombre propiamente dicho del host o número de IP
para la otra.
Se crean dos cuentas de usuario anónimo, cada una con un nombre de usuario vacío. Los usuarios anónimos no tienen contraseña, de modo que cualquier persona puede usarlos para conectarse al servidor MySQL.
En Windows, una cuenta anónima es para conexiones desde
el ordenador local. Tiene todos los privilegios,
exactamente como la cuenta root
. La
otra sirve para conectarse desde cualquier ordenador y
tiene todos los permisos sobre la base de datos
test
u otras cuyo nombre comience con
test
.
En Unix, ambas cuentas anónimas son para conexiones
desde el ordenador local (localhost). Las conexiones
deben establecerse desde el ordenador local
especificando el nombre de host
localhost
para una de las cuentas, o
el nombre propiamente dicho del host o número de IP
para la otra. Estas cuentas tienen todos los permisos
sobre la base de datos test
u otras
cuyo nombre comience con test
.
Como se advierte, ninguna de las cuentas iniciales tiene contraseña. Esto significa que la instalación de MySQL estará desprotegida hasta que:
Si se desea evitar que los clientes se conecten como anónimos sin una contraseña, se les puede establecer contraseñas o bien eliminar las cuentas anónimas.
Se deberían establecer contraseñas para las cuentas
root
de MySQL.
Las siguientes instrucciones describen cómo establecer
contraseñas para las cuentas iniciales de MySQL, primero para
las cuentas anónimas y luego para las cuentas
root
. En los ejemplos se debe reemplazar
“newpwd
” con el password
que realmente se utilizará. También se instruye cómo eliminar
las cuentas anónimas, si se prefiriera impedir completamente el
acceso de usuarios anónimos.
Podría desearse posponer la aplicación de contraseñas hasta más tarde, para que no sea necesario ingresarlas mientras se desarrollan tareas adicionales de configuración o prueba. Sin embargo, hay que asegurarse de establecerlas antes de poner la instalación en trabajo de producción real.
Para 1800 proteger con contraseña las cuentas anónimas, puede
emplearse tanto SET PASSWORD
como
UPDATE
. En ambos casos, hay que asegurarse de
encriptar el password utilizando la función
PASSWORD()
.
Para emplear SET PASSWORD
en Windows, hacer
lo siguiente:
shell> mysql -u root mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd
'); mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd
');
Para emplear SET PASSWORD
en Unix, hacer lo
siguiente:
shell> mysql -u root mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd
'); mysql> SET PASSWORD FOR ''@'host_name
' = PASSWORD('newpwd
');
En la segunda sentencia SET PASSWORD
, debe
reemplazarse host_name
con el nombre
del host del servidor. Este es el nombre que aparece en la
columna Host
del registro correspondiente a
root
que no es localhost
en la tabla user
. Si no se puede determinar
el nombre de este host, utilizar la siguiente sentencia antes
que SET PASSWORD
:
mysql> SELECT Host, User FROM mysql.user;
Localizar el registro que tiene a root
en la
columna User
y cualquier otro excepto
localhost
en la columna
Host
. Entonces, utilizar ese valor de
Host
en la segunda sentencia SET
PASSWORD
.
La otra forma de asignar contraseñas a las cuentas anónimas es
utilizando UPDATE
para modificar directamente
la tabla user
. Hay que conectarse al servidor
como root
y emitir una sentencia
UPDATE
que asigne un valor a la columna
Password
en los registros apropiados de la
tabla user
. El procedimiento es igual en
Windows y en Unix. La siguiente sentencia
UPDATE
asigna una contraseña a las dos
cuentas anónimas de una sola vez:
shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd
')
-> WHERE User = '';
mysql> FLUSH PRIVILEGES;
Luego de actualizar las contraseñas directamente en la tabla
user
empleando UPDATE
, se
le debe indicar al servidor que relea las tablas de privilegios
con FLUSH PRIVILEGES
. De otro modo, los
cambios no tendrán efecto hasta que se reinicie el servidor.
Si en lugar de lo anterior se prefiere eliminar las cuentas anónimas, hay que hacer lo siguiente:
shell> mysql -u root mysql> DELETE FROM mysql.user WHERE User = ''; mysql> FLUSH PRIVILEGES;
La sentencia DELETE
se aplica tanto en
Windows como en Unix. En Windows, si solamente se desean remover
las cuentas anónimas que tengan los mismos privilegios que
root
, debe hacerse lo siguiente:
shell> mysql -u root mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User=''; mysql> FLUSH PRIVILEGES;
Esta cuenta permite el acceso anónimo con todos los privilegios, por lo tanto, al removerla se refuerza la seguridad.
A la cuenta root
se le pueden asignar
contraseñas en varias formas. En el tratamiento del tema que se
hace a continuación se muestran tres métodos:
Usar la sentencia SET PASSWORD
Usar el programa cliente de línea de comandos mysqladmin
Usar la sentencia UPDATE
Para asignar contraseñas empleando SET
PASSWORD
, hay que conectarse al servidor como
root
y emitir dos sentencias SET
PASSWORD
, asegurándose de encriptar la contraseña
con la función PASSWORD()
.
En Windows se hace así:
shell> mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd
'); mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd
');
En Unix, así:
shell> mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd
'); mysql> SET PASSWORD FOR 'root'@'host_name
' = PASSWORD('newpwd
');
En la segunda sentencia SET PASSWORD
, se debe
reemplazar host_name
con el nombre
del host del servidor. Es el mismo nombre de host que se
utilizó al asignar contraseñas a las cuentas anónimas.
Para establecer contraseñas en las cuentas
root
empleando mysqladmin,
ejecutar los siguientes comandos:
shell> mysqladmin -u root password "newpwd
" shell> mysqladmin -u root -hhost_name
password "newpwd
"
Estos comandos se aplican tanto a Windows como a Unix. En el
segundo comando, host_name
debe
reemplazarse con el nombre del host del servidor. Las comillas
dobles que encierran la contraseña no son siempre necesarias,
pero se las debe usar si la contraseña contiene espacios u
otros caracteres que sean especiales para el intérprete de
comandos.
También puede usarse UPDATE
para modificar
directamente la tabla user
. La siguiente
sentencia UPDATE
establece una contraseña
para ambas cuentas root
de una sola vez:
shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd
')
-> WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
La sentencia UPDATE
se aplica tanto a Windows
como a Unix.
Luego de establecer las contraseñas, se las deberá suministrar en cada conexión al servidor. Por ejemplo, si se desea emplear mysqladmin para detener el servidor, se debería hacer mediante este comando:
shell> mysqladmin -u root -p shutdown
Enter password: (enter root password here)
Nota: En caso de olvidar la
contraseña de root
despues de establecerla,
el procedimiento para reinicializarla se cubre en
Sección A.4.1, “Cómo reiniciar la contraseña de root”.
Para configurar nuevas cuentas, se debe usar la sentencia
GRANT
. Para instrucciones consulte
Sección 5.7.2, “Añadir nuevas cuentas de usuario a MySQL”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.