-- =============================================================================
-- XPERT 3PL - Migracion 020
-- Inmutabilidad de audit_log via triggers, no via GRANT/REVOKE.
--
-- Se intento primero revocar UPDATE/DELETE sobre audit_log al usuario de la
-- app (xpert3pl_user), pero MySQL no permite excluir una sola tabla de un
-- GRANT ALL PRIVILEGES a nivel de base de datos (los privilegios son
-- aditivos/union entre alcances - no hay forma de "restar" un permiso de un
-- grant mas amplio sin tocar TODAS las demas tablas una por una). La
-- alternativa estandar y mas simple: triggers BEFORE UPDATE/DELETE que
-- siempre abortan con SIGNAL, sin importar que usuario de MySQL este
-- conectado (incluso uno con privilegios de administrador) - la proteccion
-- vive en el esquema mismo, no en permisos de conexion.
-- =============================================================================

DELIMITER $$

CREATE TRIGGER `trg_audit_log_no_update`
BEFORE UPDATE ON `audit_log`
FOR EACH ROW
BEGIN
    SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'audit_log es inmutable: no se permite UPDATE (GAMP5/DINAVISA)';
END$$

CREATE TRIGGER `trg_audit_log_no_delete`
BEFORE DELETE ON `audit_log`
FOR EACH ROW
BEGIN
    SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'audit_log es inmutable: no se permite DELETE (GAMP5/DINAVISA)';
END$$

DELIMITER ;
