1. La jerarquía de Seguridad
Para entender la seguridad, debemos verla en tres niveles:
- Cuentas de Usuario: Quién eres (Identidad).
- Privilegios: Qué puedes hacer (Acciones como SELECT, INSERT, DROP).
- Roles: Grupos de privilegios que se pueden asignar a varios usuarios.
2. Gestión de Usuarios
Un usuario en MySQL se define por su nombre y desde dónde se conecta ('usuario'@'host').
Crear un usuario:
CREATE USER 'analista'@'localhost' IDENTIFIED BY 'Password_Seguro_123';
Eliminar un usuario:
DROP USER 'analista'@'localhost';
3. ¿Qué son los Roles y por qué usarlos?
Imagina que tienes 20 desarrolladores nuevos. En lugar de asignar 10 permisos individuales a cada uno, creas un Rol, le asignas los permisos una vez, y luego vinculas a los desarrolladores a ese rol.
Flujo de trabajo con Roles:
- Crear el rol:
CREATE ROLE 'app_developer'; - Asignar privilegios al rol:
GRANT SELECT, INSERT, UPDATE ON mi_base_datos.* TO 'app_developer'; - Asignar el rol al usuario:
GRANT 'app_developer' TO 'analista'@'localhost';
Nota importante: En MySQL, después de asignar un rol, el usuario debe “activarlo” o tú debes definirlo como predeterminado:
SET DEFAULT ROLE 'app_developer' TO 'analista'@'localhost';
4. Tipos de Privilegios
Los privilegios se pueden otorgar a diferentes niveles de granularidad:
| Nivel | Ejemplo de comando | Alcance |
| Global | GRANT ALL ON *.* | Todo el servidor (Cuidado aquí). |
| Base de Datos | GRANT SELECT ON ventas.* | Todas las tablas de una BD. |
| Tabla | GRANT INSERT ON ventas.facturas | Solo una tabla específica. |
| Columna | GRANT SELECT (nombre, email) ON usuarios | Solo columnas específicas. |

Es posible auditar qué rol específico permitió ejecutar una acción determinada?
¿Qué diferencias existen entre la gestión de roles en MySQL y otros SGBD como PostgreSQL u Oracle?