Gestión de usuarios en MySQL

Sep 2020

Cuando se crea una aplicación en Java y en cualquier otro lenguaje, no conviene que la aplicación use las credenciales de administrador del sistema gestor. Para ello, cada aplicación usa un usuario propio que sólo le permitirá el acceso a las tablas que le corresponden. Averigua cómo crear usuarios en MySQL.

Qué necesitas para comenzar

Si aun no tienes instalada una base de datos en local, te recomendamos que adquieras una mediante el uso de Docker que simplifica al máximo las tareas necesarias, y mantiene tu PC limpio de ficheros esparcidos por tu sistema operativo.

Conectar con una base de datos MySQL

Si ha seguido los pasos para la instalación de MySQL con docker necesitará los siguientes parámetros para conectar al contenedor de base de datos, asegúrese que el servicio está activo.

  • Dirección del servidor (host): localhost
  • Puerto del servicio (port): 3306
  • Nombre de usuario (username): root
  • Clave de usuario (password): secure_pass_here

Con estos datos está en disposición de conectar a la base de datos. Ésta, puede estar en su ordenador local mediante Docker, o ser un servidor en red al que conectar remotamente. Sea cual sea el caso, podrá conectar usando diferentes clientes.

Para conectar con la herramienta nativa de MySQL, en el caso de tenerlas instaladas, podrá hacerlo usando la siguiente instrucción por el terminal de comandos:

mysql -h localhost -P 3306 --protocol=tcp -u root -p

O mejor aún, usando algún interfaz gráfico como MySQL Workbench o mediante el recomendado y cliente multi base de datos DBeaver

En cualquiera de ellos puede agregar una nueva conexión e indicar los datos citados en el listado anterior.

Crear usuario MySQL

La creación de un usuario, diferente al administrador de sistemas (root), es un paso importante, ya que si cometemos un error ejecutando sentencias SQL o si la aplicación hace lo que no esperamos, no se vea afectado más allá del alcance que pueda tener este usuario. Para ello se suele crear siempre un usuario por cada base de datos que almacena el sistema gestor MySQL. Así todas las aplicaciones podrán funcionar de forma aislada sin interferir unas con otras. Esta manera de actuar es la más recomendada.

Para crear un usuario en MySQL necesitamos saber el nombre de usuario, la contraseña y la ip desde la que estará permitido su acceso (o si se debe dejar abierto desde cualquier dirección). Una vez tengamos claros estos parámetros, abriremos una conexión desde la forma que más nos guste y ejecutaremos la siguiente sentencia:

create user 'pepito'@'%' identified by 'pepitoPass';

El carácter ‘%’ indica que el usuario ‘pepito’ se podrá conectar desde cualquier IP, de no ser así se debe sustituir el porcentaje por la IP correspondiente, manteniendo las comillas o haber usado como host ‘localhost’ permitiendo únicamente las conexiones locales.

Cambiar contraseña en MySQL

Para cambiar la clave de un usuario en MySQL necesitamos saber a qué usuario debemos referirnos y desde dónde se va a conectar, o desde dónde está permitido que conecte, la tupla de usuario@host es necesario para identificar la línea que se desea modificar.

ALTER USER 'pepito'@'%' IDENTIFIED BY 'securePepitoPass';

Esta sentencia, supone que el usuario tenía previamente acceso desde cualquier dirección de internet.

Borrar un usuario en MySQL

Para borrar un usuario, de nuevo necesitamos la pareja usuario y host. La operación no se puede deshacer, en todo caso, si nos hemos equivocado podremos crear de nuevo el mismo usuario. De hacerlo así ni la base de datos ni los permisos que tuviera se verían afectados.

drop user 'pepito'@'%';

Crear base de datos MySQL

La creación de una base de datos en MySQL es una de las operaciones más sencillas de realizar, sólo requiere el nombre de la base de datos:

create database pepito_app;

Dar permisos a un usuario en MySQL

Una vez creado el usuario y la base de datos dentro del contenedor que ejecuta el sistema gestor SQL el siguiente paso es otorgar permisos al usuario sobre dicha base de datos. Hay toda una gama amplia de permisos que pueden tener los usuarios, para afinar con mucha precisión qué puede hacer cada uno de ellos y que estará prohibido. Esta granularidad ofrece mucho control y seguridad sobre los datos que se almacenan. Por ejemplo, algunos de los permisos que se usan con frecuencia son:

  • ALL, otorga todos los permisos sobre la base de datos
  • ALTER, permite modificar tablas, secuencias, etc…
  • CREATE, permite crear tablas, secuencias, etc…
  • DROP, permite borrar tablas, secuencias, etc…
  • DELETE, permite borrar registros en tablas
  • INSERT, permite insertar registros tablas
  • UPDATE, permite actualizar registros en tablas
  • SELECT, permite consultar tablas, secuencias, etc…

En la mayoría de las ocasiones, si tenemos un usuario por base de datos, será suficiente con dar el permiso ALL, o como mínimo los necesarios para manejar los registros de la base de datos. Sea como fuere, para dar permisos a un usuario sobre una base de datos deberíamos escribir la siguiente sentencia SQL:

grant all privileges on pepito_app.\* to 'pepito'@'%';
flush privileges;

Estas dos sentencias primero asignan todos los permisos sobre todos los objetos (.*) de la base de datos pepito_app y luego actualizan las cachés de MySQL para que vuelva a recargar la configuración de los permisos. Éstos se cachean para aumentar la velocidad con la que se resuelven los accesos sin tener que leer cada vez las tablas de configuración.

Revocar permisos a un usuario en MySQL

La eliminación de permisos sobre un usuario se hace de forma análoga a la dotación de acceso, pero en este caso se usa la palabra clave revoke de la siguiente manera:

revoke insert on pepito_app.\* from 'pepito'@'%';

Recuérdese que después de cada cambio de privilegios se debe actualizar la caché con:

flush privileges;

Borrar base de datos en MySQL

Si la creación es una de las operaciones más sencillas de realizar, el borrado será similar:

drop database pepito_app;

Todas las tablas, secuencias, índices y datos de la base de datos se eliminarán de forma permanente e irrevocable del sistema gestor. ¡Asegúrate de que introduces el nombre correcto de la base de datos!

Gestión de usuarios en MySQL

¿Con ganas de seguir leyendo?

Nuestra guía de Java

Cerca de 450 páginas en un libro de tapa blanda que podrás utilizar para aprender a programar en Java desde cero sin conocimientos previos. Explicamos como usar las herramientas más usadas en el mundo empresarial, todas ellas son totalmente gratis y Open Source.

Aprende conceptos como TDD para desarrollar software con garantías. Conecta tus apps con JPA en bases de datos SQL. Integra tus proyectos con Maven y mantenlos bajo control con Git. Mantente al día con la programación funcional de Java 8+.

Nuestra guía de Java
Libro Javañol