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.

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