Puede crear cuentas MySQL de dos formas:
            Usando comandos GRANT
          
Manipulando las tablas de permisos MySQL directamente
        El método preferido es usar comandos GRANT ,
        ya que son más concisos y menos propenso a errores. .
        GRANT está disponible desde MySQL 3.22.11;
        su sintaxis se describe en Sección 13.5.1.3, “Sintaxis de GRANT y REVOKE”.
      
        Otra opción para crear cuentas es usar uno de los diversos
        programas proporcionados por terceras partes que ofrecen
        capacidades para administradores de MySQL.
        phpMyAdmin es una de ellos.
      
        Los siguientes ejemplos muestran cómo usar el programa cliente
        mysql para añadir nuevos usuarios. Estos
        ejemplos asumen que los permisos se inicializan según las
        pautas descritas en Sección 2.9.3, “Hacer seguras las cuentas iniciales de MySQL”. Esto
        significa que para realizar cambios, debe conectar al servidor
        MySQL como el usuario root , y la cuenta
        root debe tener el privilegio
        INSERT para la base de datos
        mysql y el permiso administrativo
        RELOAD.
      
        En primer lugar, use el programa mysql para
        conectar al servidor como el usuario root :
      
shell> mysql --user=root mysql
        Si ha asignado una contraseña a la cuenta
        root, necesitará la opción
        --password o -p para este
        comando mysql y también para los mostrados a
        continuación en esta sección.
      
        Tras la conexión al servidor como root,
        puede añadir nuevas cuentas. El siguiente comando usa
        GRANT para inicializar nuevas cuentas:
      
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';
        Las cuentas creadas con estos comandos GRANT
        tienen las siguientes propiedades:
      
            Dos de las cuentas tienen un nombre de usuario de
            monty y una contraseña de
            some_pass. Ambas cuentas son cuentas de
            superusuario con plenos permisos para hacer cualquier cosa.
            Una cuenta ('monty'@'localhost') puede
            usarse sólo cuando se conecte desde el equipo local. La
            otra ('monty'@'%') puede usarse para
            conectarse desde cualquier otro equipo. Note que es
            necesario tener ambas cuentas para que
            monty sea capaz de conectarse desde
            cualquier sitio como monty. Sin la cuenta
            localhost, la cuenta anónima para
            localhost creada por
            mysql_install_db tendría precedencia
            cuando monty conecte desde el equipo
            local. Como resultado, monty se trataría
            como un usuario anónimo. La razón para ello es que el
            usuario anónimo tiene un valor más específico en la
            columna Host que la cuenta
            'monty'@'%' y por lo tanto toma
            precedencia en la ordenación de la tabla
            user. (La ordenación de la tabla
            user se discute en
            Sección 5.6.5, “Control de acceso, nivel 1: Comprobación de la conexión”.)
          
            Una cuenta tiene un nombre de usuario de
            admin y no tiene contraseña. Esta cuenta
            puede usarse sólo desde el equipo local. Tiene los
            privilegios administrativos RELOAD y
            PROCESS . Éstos permiten al usuario
            admin ejecutar los comandos
            mysqladmin reload, mysqladmin
            refresh, y mysqladmin
            flush-xxx , así como
            mysqladmin processlist . No se dan
            permisos para acceder a ninguna base de datos. Puede añadir
            tal privilegio posteriormente mediante un comando
            GRANT adicional.
          
            Una cuenta tiene un nombre de usuario de
            dummy sin contraseña. Esta cuenta puede
            usarse sólo desde el equipo local. No tiene ningún
            privilegio. El permiso USAGE en el
            comando GRANT permite crear una cuenta
            sin darle ningún privilegio. Tiene el efecto de inicializar
            todos los privilegios globales a 'N'. Se
            asume que se otorgarán privilegios específicos
            posteriormente.
          
        Como alternativa a GRANT, puede crear la
        misma cuenta directamente mediante comandos
        INSERT y después diciendo al servidor que
        recargue las tablas de permisos usando FLUSH
        PRIVILEGES:
      
shell> mysql --user=root mysql
mysql> INSERT INTO user
    ->     VALUES('localhost','monty',PASSWORD('some_pass'),
    ->     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user
    ->     VALUES('%','monty',PASSWORD('some_pass'),
    ->     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user SET Host='localhost',User='admin',
    ->     Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password)
    ->     VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;
        La razón de usar FLUSH PRIVILEGES al crear
        cuantas con INSERT es decir al servidor que
        vuelva a leer las tablas de permisos. De otro modo, los cambios
        no se tienen en cuenta hasta que se reinicie el servidor. Con
        GRANT, FLUSH PRIVILEGES no
        es necesario.
      
        La razón para usar la función PASSWORD()
        con INSERT es encriptar las contraseñas. El
        comando GRANT encripta la contraseña, así
        que PASSWORD() no es necesario.
      
        El valor 'Y' activa permisos para las
        cuentas. Para la cuenta admin , puede emplear
        la sintaxis más clara extendida INSERT
        usando SET.
      
        En el comando INSERT para la cuenta
        dummy account, sólo las columnas
        Host, User, y
        Password en el registro de la tabla
        user tienen valores asignados. Ninguna de las
        columnas de permisos se asignan explícitamente, así que MySQL
        les asigna a todas el valor por defecto de
        'N'. Esto es equivalente al funcionamiento de
        GRANT USAGE.
      
        Para inicializar una cuenta de super usuario, sólo es necesario
        crear una entrada en la tabla user con las
        columnas de permisos inicializadas a 'Y'. Los
        privilegios de la tabla user son globales,
        así que no se necesitan registros en ninguna de las otras
        tablas de permisos.
      
        Los siguientes ejemplos crean tres cuentas y les dan acceso a
        bases de datos específicas. Cada una de ellas tiene un nombre
        de usuario custom y contraseña
        obscure.
      
        Para crear las cuentas con GRANT, use los
        siguientes comandos:
      
shell> mysql --user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON bankaccount.*
    ->     TO 'custom'@'localhost'
    ->     IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON expenses.*
    ->     TO 'custom'@'whitehouse.gov'
    ->     IDENTIFIED BY 'obscure';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON customer.*
    ->     TO 'custom'@'server.domain'
    ->     IDENTIFIED BY 'obscure';
Las tres cuentas pueden usarse de la siguiente manera:
            La primera cuenta puede acceder a la base de datos
            bankaccount, pero sólo desde el equipo
            local.
          
            La segunda cuenta puede acceder la base de datos
            expenses, pero sólo desde el equipo
            whitehouse.gov.
          
            La tercera cuenta puede acceder la base de datos
            customer, pero sólo desde el equipo
            server.domain.
          
        Para inicializar las cuentas custom sin usar
        GRANT, use los comandos
        INSERT como se explica para modificar las
        tablas de permisos directamente:
      
shell> mysql --user=root mysql
mysql> INSERT INTO user (Host,User,Password)
    ->     VALUES('localhost','custom',PASSWORD('obscure'));
mysql> INSERT INTO user (Host,User,Password)
    ->     VALUES('whitehouse.gov','custom',PASSWORD('obscure'));
mysql> INSERT INTO user (Host,User,Password)
    ->     VALUES('server.domain','custom',PASSWORD('obscure'));
mysql> INSERT INTO db
    ->     (Host,Db,User,Select_priv,Insert_priv,
    ->     Update_priv,Delete_priv,Create_priv,Drop_priv)
    ->     VALUES('localhost','bankaccount','custom',
    ->     'Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
    ->     (Host,Db,User,Select_priv,Insert_priv,
    ->     Update_priv,Delete_priv,Create_priv,Drop_priv)
    ->     VALUES('whitehouse.gov','expenses','custom',
    ->     'Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
    ->     (Host,Db,User,Select_priv,Insert_priv,
    ->     Update_priv,Delete_priv,Create_priv,Drop_priv)
    ->     VALUES('server.domain','customer','custom',
    ->     'Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
        Los primeros tres comandos INSERT añaden
        registros en la tabla user que permiten al
        usuario custom conectar desde los equipos con
        la contraseña dada, pero no otorga privilegios blobales (todos
        los privilegios se inicializan al valor por defecto
        'N'). Los siguientes tres comandos
        INSERT añaden registros en la tabla
        db que otorgan privilegios a
        custom para las bases de datos
        bankaccount, expenses, y
        customer, pero sólo cuando se accede desde
        los equipos apropiados. Como siempre, cuando modifique las
        tablas de permisos directamente, debe decirle al servidor que
        las recargue con FLUSH PRIVILEGES para que
        los cambios en los permisos tengan efecto.
      
        Si quiere dar a un usuario específico acceso desde todas las
        máquinas dentro de un dominio dado (por ejemplo,
        mydomain.com), puede realizar un comando
        GRANT que use el carácter comodín
        '%' en la parte del equipo del nombre de
        cuenta:
      
mysql> GRANT ...
    ->     ON *.*
    ->     TO 'myname'@'%.mydomain.com'
    ->     IDENTIFIED BY 'mypass';
Para hacer lo mismo modificando las tablas de permisos directamente, haga lo siguiente:
mysql> INSERT INTO user (Host,User,Password,...)
    ->     VALUES('%.mydomain.com','myname',PASSWORD('mypass'),...);
mysql> FLUSH PRIVILEGES;
É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.

