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_namepassword "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.

