Cuando instalas el servicio de base de datos MySQL, crea una cuenta raíz automáticamente. Puedes utilizarla para realizar cualquier acción y acceder a cualquier dato. ¡Esto puede ser una pesadilla de seguridad!

Para mantener la seguridad de tu sitio, es conveniente configurar cuentas adicionales que no tengan estos privilegios elevados. Afortunadamente, hay varias formas de crear nuevos usuarios en MySQL.

En este post, exploraremos todas las razones por las que puedes querer añadir más usuarios a tu base de datos MySQL. A continuación, te mostraremos cómo crear estas cuentas y gestionar los permisos para obtener la máxima seguridad. ¡Empecemos!

Una introducción a MySQL (y por qué puedes querer añadir nuevos usuarios)

La distribución oficial de WordPress es compatible con los motores de bases de datos MySQL y MariaDB. Si has sopesado los pros y los contras, es posible que hayas optado por la última versión del software de gestión de bases de datos MySQL. En algún momento, es posible que quieras crear usuarios adicionales.

En MySQL, cada cuenta consta de un nombre de usuario y una contraseña. También especifica el host o los hosts cliente donde el usuario puede conectarse a tu servidor MySQL.

Normalmente crearás cuentas adicionales cuando más personas necesiten acceder a tu base de datos. Aunque varias personas pueden interactuar con MySQL desde la misma cuenta, compartir las credenciales de acceso es un riesgo para la seguridad. Si detectas algún error o actividad sospechosa en tu base de datos, una cuenta compartida también dificultará la identificación del culpable.

MySQL es un sistema basado en permisos. Te permite controlar exactamente a qué información tiene acceso cada usuario y las acciones que puede realizar. Crear varias cuentas con diferentes permisos es mucho más seguro que confiar en una sola cuenta con acceso global.

Cuando instalas MySQL, se crea automáticamente una única cuenta de superusuario ‘root’@’localhost’. Incluso si gestionas la base de datos en solitario, es conveniente crear al menos una cuenta adicional. Al hacerlo, te aseguras de que no perderás el acceso a toda la base de datos sólo porque te encuentres con un problema con ‘root’@’localhost’

Esta cuenta de root también tiene permiso para acceder a todos tus datos y realizar cualquier acción. Incluso los usuarios experimentados de bases de datos pueden causar graves daños con este nivel de control. Por esta razón, es posible que quieras crear una cuenta de usuario normal que puedas utilizar para la administración diaria de MySQL. Luego puedes reservar ‘root’@’localhost’ para las tareas que requieran privilegios elevados.

¿Cómo gestionar tu base de datos MySQL?

Cuando se trata de gestionar tu base de datos MySQL, tienes dos opciones. Puedes utilizar MySQL Shell, que es una interfaz Python, Javascript o SQL y un componente del servidor MySQL. Esta herramienta está disponible en Microsoft Windows, Linux y macOS para plataformas de 64 bits.

También puedes utilizar la herramienta gratuita phpMyAdmin. Echemos un vistazo a estas dos opciones.

1. Gestionar tu base de datos desde MySQL Shell

Para entrar en el intérprete de comandos de MySQL, abre un Terminal o un Símbolo del sistema. A continuación, puedes ejecutar el siguiente comando:

> mysqlsh

Esto abre la Shell de MySQL sin conectarse a un servidor. Por defecto, MySQL Shell se inicia en modo JavaScript, pero puedes cambiar de modo utilizando el comando sql, py o js:

Abrir el Shell de MySQL
Abrir el Shell de MySQL

En la Shell de MySQL, las conexiones a las instancias del Servidor MySQL se gestionan mediante un objeto de sesión. Si el Protocolo X está disponible, entonces puedes utilizar un objeto de sesión. Ten en cuenta que el Protocolo X requiere el Plugin X.

El Plugin X escucha el puerto especificado por mysqlx_port, que por defecto es el 33060. Puedes crear un objeto Sesión utilizando lo siguiente:

–mysqlx (–mx)

Por ejemplo, puedes establecer una conexión de Protocolo X con una instancia local del Servidor MySQL que escucha en el puerto 33060, utilizando lo siguiente

shell> mysqlsh –mysqlx -u user -h localhost -P 33060

Si el Protocolo X no está disponible, puedes utilizar un objeto ClassicSession. Este objeto está pensado para ejecutar SQL contra servidores que utilizan el protocolo clásico de MySQL. Para crear un objeto ClassicSession, escribe

–mysql (–mc)

Puedes verificar los resultados de tu intento de conexión utilizando el comando de estado de MySQL Shell o el método shell.status(). Por ejemplo:

mysql-js []> shell.status()

Para asignar privilegios a través de MySQL Shell, tendrás que ejecutar tus comandos como usuario root. Para ello, introduce lo siguiente y luego proporciona tu contraseña de usuario root de MySQL cuando se te pida:

mysql -u root -p

Aquí, la -u indica que el siguiente parámetro es un nombre de usuario, que en este caso es root. En lugar de mostrar la contraseña en texto plano, utilizamos -p. Esto especifica que no se proporciona la contraseña y que tendrás que introducirla cuando se te pida. El uso de estos parámetros puede ayudar a mantener la seguridad de tu cuenta de root.

2. Gestionar tu base de datos desde phpMyAdmin

Si prefieres utilizar una interfaz gráfica de usuario (GUI), puedes gestionar la base de datos MySQL a través de phpMyAdmin. Con los permisos adecuados, esta interfaz te puede permitir crear nuevas cuentas, ver y editar permisos, y eliminar cuentas que ya no necesites. Necesitarás iniciar sesión como root para realizar estas acciones.

Puedes descargar esta herramienta de forma gratuita desde el sitio web de phpMyAdmin.

Ejemplo del panel de phpMyAdmin.
Ejemplo del panel de phpMyAdmin.

¿Cómo crear y gestionar un usuario de MySQL? (4 procesos clave)

Una vez que estés conectado a tu base de datos, puedes realizar muchas acciones diferentes. Aquí tienes cuatro formas clave de gestionar tus cuentas de usuario MySQL.

1. Crear un nuevo usuario en el servidor de la base de datos

En phpMyAdmin, puedes crear una cuenta utilizando el enlace Añadir un nuevo usuario. A continuación, puedes utilizar los campos de texto y los desplegables para configurar esta cuenta:

En este punto, tienes la opción de asignar privilegios globales. Esto concede al usuario acceso ilimitado a todas tus bases de datos y tablas. Puede ser un riesgo para la seguridad, por lo que sólo debes dar estos privilegios elevados cuando sean necesarios. Puedes asignar privilegios específicos de la base de datos después de crear esta cuenta.

Para crear una nueva cuenta a través del shell de MySQL, introduce el comando CREATE USER. También tendrás que proporcionar un nombre de usuario y el nombre de host. Este último es el nombre del host desde el que el usuario se conecta al Servidor MySQL:

CREATE USER ‘exampleuser’@’localhost’ IDENTIFIED BY ‘password’;

Cuando escribas este comando, asegúrate de sustituir exampleuser y password por los valores que quieras asignar a esta cuenta. El usuario siempre puede cambiar su contraseña de MySQL más adelante.

En el ejemplo anterior, estamos estableciendo el nombre de host como «localhost». Por tanto, el usuario sólo podrá conectarse al servidor MySQL desde el sistema en el que se esté ejecutando el servidor MySQL.

Es posible que quieras sustituir la palabra «localhost » por la dirección de tu servidor. Por ejemplo, si este usuario necesita acceder a MySQL desde una máquina con la dirección del Protocolo de Internet (IP) 11.0.0.0, entonces ejecutarías lo siguiente

CREATE USER ‘newuser’@’11.0.0.0’ IDENTIFIED BY ‘user_password’;

Si quieres crear un usuario que pueda conectarse desde cualquier host, puedes incluir el comodín % en tu comando. Por ejemplo:

CREATE USER ‘newuser’@’%’ IDENTIFIED BY ‘user_password’;

También puedes omitir el valor del nombre de host por completo. Esto tendrá el mismo resultado.

2. Asignar permisos a MySQL a través de phpMyAdmin

Por defecto, un nuevo usuario de MySQL no tiene permiso para realizar ninguna acción. Incluso si entra en su cuenta, no podrá crear ninguna tabla ni seleccionar ningún dato.

Después de crear un nuevo usuario, normalmente querrás empezar a asignarle algunos permisos. Para mantener la seguridad de tu base de datos, es una buena idea dar a cada usuario los privilegios mínimos necesarios para realizar su trabajo. También es conveniente revisar regularmente sus permisos y revocar los que sean innecesarios.

Puedes editar los privilegios de un usuario desde el panel de Usuarios de phpMyAdmin.

Conceder acceso sin restricciones puede parecer la opción más fácil, pero puede poner en riesgo tu base de datos. A menos que tengas una razón específica, normalmente querrás evitar dar a alguien rienda suelta a toda tu base de datos.

3. Modificar los permisos de usuario desde el shell de MySQL

Si utilizas el Shell de MySQL, puedes ver todos los privilegios concedidos a una cuenta concreta con el comando SHOW GRANTS. Tendrás que sustituir «username» y «localhost» por la información de la cuenta que quieras revisar:

SHOW GRANTS FOR ‘username’@’localhost’;

Cuando crees una cuenta, esta lista estará vacía. Puedes empezar a asignar accesos a diferentes partes de tu base de datos utilizando el comando GRANT:

GRANT type_of_permission ON database_name.table_name TO ‘username’@’localhost’;

En este comando, estamos especificando los privilegios que estamos asignando, seguidos de la base de datos y las tablas a las que se deben aplicar estos cambios. Por último, estamos proporcionando el nombre de usuario y el servidor que recibirá los privilegios nombrados. Encontrarás una lista completa de todos los privilegios disponibles en la documentación oficial de MySQL.

Documentación de MySQL
Documentación de MySQL

Si quieres conceder acceso a cualquier base de datos o tabla, puedes utilizar un asterisco (*) en lugar del nombre de la base de datos o de la tabla. Por ejemplo:

GRANT ALL PRIVILEGES ON *. * TO ‘exampleuser’@’localhost’;

Aquí, estamos concediendo a exampleuser permiso para leer, editar, ejecutar y realizar todas las tareas en todas las bases de datos y tablas. Normalmente querrás reservar estos privilegios elevados para los administradores.

A veces, puede que necesites quitar un permiso. Por ejemplo, puede que hayas concedido un privilegio por error, o que el usuario ya no lo necesite. Para revocar el acceso, ejecuta lo siguiente:

REVOKE type_of_permission ON database_name.table_name FROM ‘username’@’localhost’;

Si asignas privilegios con el comando GRANT, MySQL debería notar estos cambios y aplicarlos automáticamente. Sin embargo, sigue siendo inteligente refrescar los privilegios de un usuario ejecutando el comando FLUSH PRIVILEGES;.

4. Eliminar un usuario de MySQL

A veces, puedes necesitar eliminar un usuario de tu base de datos MySQL. Por ejemplo, puede que esta persona abandone tu organización, o que se traslade a otro departamento. También es posible que quieras limitar el número de personas que pueden acceder a tu base de datos, para aumentar tu seguridad.

Si trabajas con MySQL Shell, puedes eliminar una cuenta mediante la sentencia DROP USER. Este comando también eliminará todos sus privilegios:

DROP USER ‘username’@’localhost’;

Como alternativa, puedes utilizar phpMyAdmin para encontrar la cuenta que deseas eliminar en la página Usuarios. A continuación, puedes seleccionar la casilla de verificación correspondiente y elegir si también deseas eliminar cualquier base de datos con el mismo nombre.

Cuando estés satisfecho de proceder, haz clic en Ir. Esta persona será ahora eliminada de MySQL.

Resumen

MySQL crea automáticamente una cuenta de superusuario ‘root’@’localhost’, pero nunca es buena idea usarla para todo. Si creas varios usuarios de MySQL, puedes asignar diferentes privilegios para mantener tus datos a salvo.

Además, puedes asegurarte de no perder el acceso a tu base de datos porque tengas problemas con ‘root’@’localhost’.

Como propietario de un sitio web, tu base de datos suele ser tu activo más valioso. En Kinsta, nuestro equipo de expertos en WordPress puede ayudarte a mantener tu base de datos en plena forma.

Todos nuestros planes de alojamiento incluyen soporte técnico las 24 horas del día. Al asociarte con Kinsta, siempre tendrás a tu disposición a veteranos de WordPress para ayudarte a resolver cualquier problema con tu base de datos MySQL.