Gestión de Usuarios y Seguridad en MariaDB

1. Ejemplo de Escalado de Privilegios Mal Configurado

Supón que tienes un usuario llamado usuario_inseguro al que sin querer le diste permisos como este:

GRANT SELECT, INSERT, UPDATE ON base_datos.* TO 'usuario_inseguro'@'localhost' WITH GRANT OPTION;

Con ese WITH GRANT OPTION, el usuario puede dar permisos a otros usuarios o incluso a sí mismo.

El usuario se da más permisos

GRANT ALL PRIVILEGES ON base_datos.* TO 'usuario_inseguro'@'localhost';

También podría crear otro usuario con más privilegios

CREATE USER 'nuevo_jefe'@'localhost' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON *.* TO 'nuevo_jefe'@'localhost' WITH GRANT OPTION;

2. Cómo evitar esto (Buenas Prácticas)

Nunca uses WITH GRANT OPTION salvo que sea necesario

Crea usuarios con permisos específicos

GRANT SELECT, INSERT ON base_datos.ventas TO 'usuario_ventas'@'localhost';

Revisa qué privilegios tiene un usuario

SHOW GRANTS FOR 'usuario_inseguro'@'localhost';

Revoca privilegios si hay algo raro

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'usuario_inseguro'@'localhost';

Verificar si un usuario tiene GRANT OPTION

SELECT user, host, Grant_priv FROM mysql.user WHERE user = 'usuario_inseguro';

3. Ver Usuarios Conectados

Ver conexiones activas (usuarios conectados y lo que hacen)

SHOW PROCESSLIST;

Ver conexiones activas de forma más limpia

SELECT ID, USER, HOST, DB, COMMAND, TIME, STATE 
FROM information_schema.PROCESSLIST;

Ver solo conexiones activas distintas

SELECT DISTINCT user, host 
FROM information_schema.PROCESSLIST;

Ver usuarios creados (no necesariamente conectados)

SELECT user, host FROM mysql.user;

Requiere permiso PROCESS para ver conexiones ajenas

GRANT PROCESS ON *.* TO 'usuario'@'localhost';

4. Resumen

Situación Riesgo Solución
Usuario con WITH GRANT OPTION Escala fácil Evita este privilegio
Usuario con privilegios en *.* Control total Limita a bases/tables específicas
Revisión de permisos Necesaria SHOW GRANTS, mysql.user


Diego J. Gonzalez