Para crear un nuevo usuario en MySQL, necesitas acceso a la base de datos. Además, también debes contar con pri­vi­le­gios de usuario root, con los que puedes crear cuentas de usuario y gestionar los permisos asignados. Asimismo, es im­po­r­ta­n­te que sepas qué tipo de permiso vas a otorgar al nuevo usuario: permisos de lectura, permisos de escritura o incluso permisos de ad­mi­ni­s­tra­dor.

Crear un usuario con MySQL

Al instalar el sistema gestor de bases de datos, MySQL crea una cuenta root con control total sobre las bases de datos, tablas y usuarios. Si necesitas ayuda con la in­s­ta­la­ción, en­co­n­tra­rás toda la in­fo­r­ma­ción im­po­r­ta­n­te en la siguiente guía para aprender a utilizar MySQL.

Con una cuenta root, puedes crear nuevas cuentas de usuario MySQL y asi­g­nar­les una serie de permisos. Es im­po­r­ta­n­te conocer que en los sistemas Ubuntu con MySQL 5.7 y versiones po­s­te­rio­res, la au­te­n­ti­ca­ción del usuario root no se realiza con co­n­tra­se­ña, sino con el plugin auth_socket. Para que la au­te­n­ti­ca­ción se lleve a cabo con éxito, el nombre del usuario del sistema que quiere usar el cliente MySQL debe coincidir con el nombre del usuario MySQL es­pe­ci­fi­ca­do en el comando. Es decir, para poder acceder a la cuenta root es im­po­r­ta­n­te anteponer el comando sudo:

$ sudo mysql
bash

Para crear un nuevo usuario en MySQL, usa el comando CREATE USER, con el que podrás crear un usuario con un nombre de usuario y co­n­tra­se­ña es­pe­cí­fi­cos:

mysql> CREATE USER 'nombreusuario'@'host' IDENTIFIED WITH authentication_plugin BY 'contraseña';
bash

Sustituye “no­m­breu­sua­rio” por un nombre de usuario de tu elección. A co­n­ti­nua­ción, introduce en host el nombre del host desde el que se conectará el nuevo usuario. Si el usuario solo va a poder acceder desde tu servidor Ubuntu local, puedes in­tro­du­cir localhost.

Existen varias opciones di­s­po­ni­bles de plugin de au­te­n­ti­ca­ción. Aunque el plugin auth_socket ofrece un alto nivel de seguridad, ya que los usuarios deben in­tro­du­cir una co­n­tra­se­ña para acceder a la base de datos, también impide las co­ne­xio­nes remotas. Esto puede desem­bo­car en un mayor esfuerzo cuando programas externos necesitan in­ter­ac­tuar con MySQL. Como al­te­r­na­ti­va, puedes omitir la parte del comando WITH authentication_plugin para que el usuario realice la au­te­n­ti­ca­ción con el plugin estándar de MySQL caching_sha2_password. El comando en este caso se muestra como sigue:

mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
bash

Después de haber creado un nuevo usuario, llega el momento de asignarle una serie de permisos.

Asignar permisos de usuario con MySQL create user

Para ga­ra­n­ti­zar la seguridad de los datos en MySQL, crear y gestionar permisos de usuario es muy im­po­r­ta­n­te. El comando para asignar permisos de usuario es:

mysql> GRANT PRIVILEGE ON database.table TO 'nombreusuario'@'host';
bash

El valor PRIVILEGE determina de qué pri­vi­le­gios dispone el usuario en la base de datos y tabla es­pe­ci­fi­ca­das. Puedes re­em­pla­zar este valor con los si­guie­n­tes comandos, entre otros:

  • CREATE: permite a los usuarios crear una base de datos o tabla.
  • SELECT: permite a los usuarios acceder a datos.
  • INSERT: permite a los usuarios añadir nuevas entradas a las tablas.
  • UPDATE: permite a los usuarios cambiar entradas exi­s­te­n­tes en las tablas.
  • DEELETE: permite a los usuarios borrar entradas de la tabla.
  • DROP: permite a los usuarios eliminar tablas completas de la base de datos.

También puedes otorgar varios pri­vi­le­gios de una vez a los nuevos usuarios. Utiliza el mismo comando, pero separa cada pri­vi­le­gio con una coma:

mysql> GRANT SELECT, INSERT, UPDATE ON database.table TO 'nombre_usuario'@'host';
bash

Si lo deseas, puedes conceder los pri­vi­le­gios es­ti­pu­la­dos para todas las bases de datos o tablas en un único comando. Solo tienes que in­tro­du­cir * en lugar de los nombres de la base de datos y las tablas. En el siguiente comando, por ejemplo, se autoriza a un usuario a consultar datos en todas las bases de datos y tablas con SELECT, así como a añadir nuevas entradas con INSERT y a modificar entradas exi­s­te­n­tes con UPDATE.

mysql> GRANT SELECT, INSERT, UPDATE ON *.* TO nombredeusuario@'host';
bash

Después de ejecutar en MySQL CREATE USER o GRANT, puedes utilizar el comando FLUSH PRIVILEGES para ac­tua­li­zar la base de datos y ac­tua­li­zar las tablas de pri­vi­le­gios. De este modo, entran en vigor los nuevos permisos:

mysql> FLUSH PRIVILEGES;
bash

Sin embargo, es im­po­r­ta­n­te que los usuarios solo cuenten con los permisos que necesiten. Al fin y al cabo, oto­r­gá­n­do­le a los usuarios de­te­r­mi­na­dos pri­vi­le­gios, también estás au­me­n­ta­n­do el riesgo de seguridad.

Crear usuario MySQL: revocar permisos de usuario

El comando REVOKE se utiliza para revocar permisos de usuario en MySQL. La sintaxis es similar a la del comando GRANT. Sin embargo, en este caso debes utilizar FROM en lugar de TO:

mysql> REVOKE type_of_permission ON nombre_base_de_datos.nombre_tabla FROM 'nombreusuario'@'host';
bash

Para mostrar los permisos actuales de un usuario, puedes utilizar el comando SHOW GRANTS:

mysql> SHOW GRANTS FOR 'nombreusuario'@'host';
bash

El comando DROP se utiliza para eliminar un usuario:

mysql> DROP USUARIO 'nombreusuario'@'localhost';
bash

Sin embargo, la eli­mi­na­ción de usuarios hay que llevarla a cabo con mucho cuidado, sobre todo en el caso de los usuarios con pri­vi­le­gios ad­mi­ni­s­tra­ti­vos. Evita la pérdida ac­ci­de­n­tal de datos ase­gu­rá­n­do­te de que eliminas el usuario que realmente deseas.

Después de crear un nuevo usuario MySQL y otorgarle permisos, puedes salir del cliente MySQL:

mysql> exit
bash
Ir al menú principal