PRIVILEGIOS DINÁMICOS EN MYSQL
Después de explicar los privilegios en MySQL hay que explicar los privilegios dinámicos en MySQL. Son permisos introducidos a partir de MySQL 8 que no están asociados a objetos específicos de la base de datos (como tablas o bases de datos), sino a funcionalidades o componentes del servidor. A diferencia de los privilegios (como SELECT, INSERT, etc.), los privilegios dinámicos se relacionan con operaciones administrativas o características específicas del sistema.Los privilegios dinámicos en MySQL son permisos que se crean dinámicamente por el servidor o por componentes o plugins instalados. No están predefinidos en el núcleo de MySQL, sino que se registran cuando se instala o activa un componente (por ejemplo, un plugin de auditoría o un motor de almacenamiento). Se almacenan en la tabla mysql.global_grants en lugar de las tablas tradicionales de privilegios (mysql.user, mysql.db, etc.).
Ejemplos de Privilegios Dinámicos
Algunos ejemplos comunes de privilegios dinámicos en MySQL 8.0+ incluyen:
- AUDIT_ADMIN: Permite configurar y administrar auditorías.
- BACKUP_ADMIN: Permite realizar operaciones de respaldo (como usar mysqldump con ciertas configuraciones).
- BINLOG_ADMIN: Controla la gestión del registro binario (binary log).
- CONNECTION_ADMIN: Permite administrar conexiones de usuarios (por ejemplo, matar conexiones).
- ENCRYPTION_KEY_ADMIN: Gestiona claves de cifrado para funciones de seguridad.
- FIREWALL_ADMIN: Permite configurar reglas de firewall de MySQL.
- REPLICATION_SLAVE_ADMIN: Gestiona la configuración de réplicas esclavas.
- SESSION_VARIABLES_ADMIN: Permite modificar variables de sesión específicas.
- SYSTEM_VARIABLES_ADMIN: Permite modificar variables globales del sistema.
La lista completa de privilegios dinámicos disponibles depende de la versión de MySQL y los componentes instalados. Se puedes consultar los privilegios dinámicos registrados con la query:
SELECT * FROM mysql.global_grants;
Los privilegios dinámicos suelen estar asociados a plugins o componentes. Por ejemplo el plugin de auditoría (audit_log) puede introducir privilegios como AUDIT_ADMIN y
el componente de firewall de MySQL introduce FIREWALL_ADMIN y FIREWALL_USER. Si un componente se desinstala, los privilegios dinámicos asociados dejan de estar disponibles, pero las asignaciones permanecen en mysql.global_grants hasta que se revocan explícitamente.
Gestión de Privilegios Dinámicos
os privilegios dinámicos se gestionan con los mismos comandos que los privilegios (GRANT, REVOKE, etc.), pero se aplican a nivel global (ON *.*).
- Otorgar Privilegios Dinámicos:
//Otorgar al usuario el privilegio dinámico BACKUP_ADMIN para realizar operaciones de respaldo.
GRANT BACKUP_ADMIN ON *.* TO 'usuario'@'localhost';
- Revocar Privilegios Dinámicos:
REVOKE BACKUP_ADMIN ON *.* FROM 'usuario'@'localhost';
- Ver Privilegios Dinámicos, para ver los privilegios dinámicos asignados a un usuario:
SHOW GRANTS FOR 'usuario'@'localhost';
- Privilegios Dinámicos y Roles, los privilegios dinámicos también pueden asignarse a roles (disponibles en MySQL 8.0+):
CREATE ROLE 'rol_admin_backups';
GRANT BACKUP_ADMIN ON *.* TO 'rol_admin_backups';
GRANT 'rol_admin_backups' TO 'usuario'@'localhost';
SET DEFAULT ROLE 'rol_admin_backups' FOR 'usuario'@'localhost';
Ejemplo de como otorgar a un usuario la capacidad de administrar copias de seguridad:
-- Crear usuario
CREATE USER 'admin_backups'@'localhost' IDENTIFIED BY 'contraseña';
-- Otorgar privilegio dinámico
GRANT BACKUP_ADMIN ON *.* TO 'admin_backups'@'localhost';
-- Verificar
SHOW GRANTS FOR 'admin_backups'@'localhost';
-- Revocar si es necesario
REVOKE BACKUP_ADMIN ON *.* FROM 'admin_backups'@'localhost';
Para ver qué privilegios dinámicos están registrados en el servidor hay que ejecutar la siguiente query:
SELECT * FROM mysql.global_grants;
Y para comprobar componentes instalados hay que ejecutar la siguiente query:
SELECT * FROM mysql.component;
SELECT * FROM mysql.global_grants;
- Otorgar Privilegios Dinámicos:
//Otorgar al usuario el privilegio dinámico BACKUP_ADMIN para realizar operaciones de respaldo. GRANT BACKUP_ADMIN ON *.* TO 'usuario'@'localhost'; - Revocar Privilegios Dinámicos:
REVOKE BACKUP_ADMIN ON *.* FROM 'usuario'@'localhost'; - Ver Privilegios Dinámicos, para ver los privilegios dinámicos asignados a un usuario:
SHOW GRANTS FOR 'usuario'@'localhost'; - Privilegios Dinámicos y Roles, los privilegios dinámicos también pueden asignarse a roles (disponibles en MySQL 8.0+):
CREATE ROLE 'rol_admin_backups'; GRANT BACKUP_ADMIN ON *.* TO 'rol_admin_backups'; GRANT 'rol_admin_backups' TO 'usuario'@'localhost'; SET DEFAULT ROLE 'rol_admin_backups' FOR 'usuario'@'localhost';
-- Crear usuario
CREATE USER 'admin_backups'@'localhost' IDENTIFIED BY 'contraseña';
-- Otorgar privilegio dinámico
GRANT BACKUP_ADMIN ON *.* TO 'admin_backups'@'localhost';
-- Verificar
SHOW GRANTS FOR 'admin_backups'@'localhost';
-- Revocar si es necesario
REVOKE BACKUP_ADMIN ON *.* FROM 'admin_backups'@'localhost';
SELECT * FROM mysql.global_grants;
SELECT * FROM mysql.component;