Gestión de Usuarios y Permisos en Bases de Datos MySQL

Clase 15 de 19Curso de SQL y MySQL

Resumen

La gestión de usuarios y permisos en MySQL es un aspecto fundamental para mantener la seguridad e integridad de nuestras bases de datos. Muchos problemas de seguridad y pérdida de datos pueden evitarse simplemente implementando una estrategia adecuada de permisos granulares, en lugar de compartir credenciales de administrador. Veamos cómo podemos crear y administrar usuarios en MySQL de manera efectiva y segura.

¿Cómo crear usuarios en MySQL y por qué es importante?

Uno de los mayores problemas en entornos de desarrollo y producción es el uso compartido de credenciales administrativas. Esta práctica, aunque común, representa un grave riesgo de seguridad. Cuando un administrador comparte su usuario y contraseña, pierde la capacidad de rastrear quién realizó qué cambios en la base de datos.

MySQL ofrece un sistema robusto para crear usuarios con permisos específicos. Esto permite:

  • Control granular de acciones: determinar exactamente qué puede y qué no puede hacer cada usuario
  • Restricción de conexiones: limitar desde qué ubicaciones puede conectarse un usuario
  • Trazabilidad: identificar quién realizó cada operación

Para crear un usuario nuevo en MySQL, utilizamos la siguiente sintaxis:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

Por ejemplo:

CREATE USER 'becoplatzi'@'%' IDENTIFIED BY 'beco123';

En este comando:

  • becoplatzi es el nombre del usuario
  • % es un comodín que permite la conexión desde cualquier host
  • beco123 es la contraseña

¿Cómo restringir el acceso por ubicación?

Podemos limitar desde dónde puede conectarse un usuario:

  • Para permitir conexiones solo desde el servidor local: 'username'@'localhost'
  • Para permitir conexiones desde cualquier lugar: 'username'@'%'
  • Para permitir conexiones desde una IP específica: 'username'@'192.168.0.101'

Esta capacidad de restricción por ubicación añade una capa adicional de seguridad a nuestras bases de datos.

¿Qué permisos podemos asignar a los usuarios en MySQL?

Una vez creado el usuario, debemos asignarle permisos específicos. Los permisos más comunes son:

  1. CREATE: permite crear nuevas tablas o bases de datos
  2. ALTER: permite modificar la estructura de tablas existentes
  3. DROP: permite eliminar tablas o bases de datos
  4. INSERT: permite insertar datos en las tablas
  5. UPDATE: permite modificar datos existentes
  6. DELETE: permite eliminar registros
  7. SELECT: permite consultar datos
  8. REFERENCES: permite crear relaciones entre tablas
  9. INDEX: permite crear y eliminar índices

Para asignar estos permisos, utilizamos el comando GRANT:

GRANT permission1, permission2, ... ON database_name.table_name TO 'username'@'host' [WITH GRANT OPTION];

Por ejemplo:

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, INDEX ON platzisql.* TO 'becoplatzi'@'%' WITH GRANT OPTION;

La opción WITH GRANT OPTION permite al usuario otorgar sus propios permisos a otros usuarios.

¿Cómo asignar permisos según el rol del usuario?

Para un DBA (Administrador de Base de Datos):

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, INDEX ON database.* TO 'dba_user'@'host';

Para una aplicación:

GRANT INSERT, UPDATE, SELECT ON database.* TO 'app_user'@'host';

Para un analista de datos:

GRANT SELECT, INDEX ON database.* TO 'analyst_user'@'host';

Para un desarrollador:

GRANT CREATE, ALTER, INSERT, SELECT, REFERENCES, INDEX ON database.* TO 'dev_user'@'host';

¿Cómo verificar y utilizar los usuarios creados?

Para ver los usuarios existentes en MySQL:

SELECT host, user FROM mysql.user;

Para conectarse con un usuario específico:

mysql -u username -p

Una vez conectado, podemos verificar a qué bases de datos tenemos acceso:

SHOW DATABASES;

Y para usar una base de datos específica:

USE database_name;
SHOW TABLES;

Nota importante: MySQL utiliza sus propias tablas para administrar usuarios y permisos. Estas tablas se encuentran en la base de datos mysql, lo que hace que el sistema sea transparente y robusto.

La gestión adecuada de usuarios y permisos es fundamental para mantener la seguridad e integridad de nuestras bases de datos. Implementar una estrategia clara de asignación de permisos según roles específicos nos ayudará a prevenir problemas y a mantener un control efectivo sobre quién puede hacer qué en nuestro sistema. ¿Qué estrategias de gestión de usuarios utilizas en tus proyectos? Comparte tu experiencia en los comentarios.