Files
webval/SQL_TABLES_ANTITRICHE.sql

185 lines
5.9 KiB
SQL

-- ============================================================================
-- SCRIPT SQL : Tables Anti-Triche - VERSION CORRIGÉE DÉFINITIVE
-- ============================================================================
-- Date : 29 décembre 2025
-- Base : mathematiques_db
-- Correction : Utilisation des bons noms de colonnes (id_tentative, id_question)
-- ============================================================================
USE mathematiques_db;
-- ============================================================================
-- TABLE 1 : sessions_calc
-- ============================================================================
DROP TABLE IF EXISTS sessions_calc;
CREATE TABLE sessions_calc (
id INT AUTO_INCREMENT PRIMARY KEY,
id_tentative INT(11) NOT NULL,
id_eleve INT(11) NOT NULL,
session_token VARCHAR(64) UNIQUE NOT NULL,
computer_name VARCHAR(100),
computer_username VARCHAR(100),
ip_address VARCHAR(45),
user_agent TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_activity TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
disconnected_at TIMESTAMP NULL,
is_active BOOLEAN DEFAULT TRUE,
macro_hash VARCHAR(64) DEFAULT NULL,
file_hash VARCHAR(64) DEFAULT NULL,
FOREIGN KEY (id_tentative) REFERENCES tentatives_eleves(id_tentative) ON DELETE CASCADE,
FOREIGN KEY (id_eleve) REFERENCES utilisateurs(id_utilisateur) ON DELETE CASCADE,
INDEX idx_session_token (session_token),
INDEX idx_active (is_active, last_activity),
INDEX idx_tentative (id_tentative),
INDEX idx_eleve (id_eleve)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================================
-- TABLE 2 : reponses_calc
-- ============================================================================
DROP TABLE IF EXISTS reponses_calc;
CREATE TABLE reponses_calc (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
id_tentative INT(11) NOT NULL,
id_question INT(11) NOT NULL,
session_token VARCHAR(64) NOT NULL,
reponse_choisie VARCHAR(10) NOT NULL,
saved_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
computer_name VARCHAR(100),
client_timestamp BIGINT DEFAULT NULL,
time_spent_seconds INT DEFAULT NULL,
FOREIGN KEY (id_tentative) REFERENCES tentatives_eleves(id_tentative) ON DELETE CASCADE,
FOREIGN KEY (id_question) REFERENCES questions(id_question) ON DELETE CASCADE,
FOREIGN KEY (session_token) REFERENCES sessions_calc(session_token) ON DELETE CASCADE,
INDEX idx_tentative (id_tentative),
INDEX idx_question (id_question),
INDEX idx_session (session_token),
INDEX idx_saved_at (saved_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================================
-- TABLE 3 : logs_actions
-- ============================================================================
DROP TABLE IF EXISTS logs_actions;
CREATE TABLE logs_actions (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
id_tentative INT(11) NOT NULL,
session_token VARCHAR(64) NOT NULL,
action_type ENUM(
'connexion',
'deconnexion',
'reponse_modifiee',
'copier_coller',
'changement_fenetre',
'inactivite',
'reconnexion',
'soumission',
'autre'
) NOT NULL,
action_details TEXT,
computer_name VARCHAR(100),
ip_address VARCHAR(45),
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (id_tentative) REFERENCES tentatives_eleves(id_tentative) ON DELETE CASCADE,
INDEX idx_tentative (id_tentative),
INDEX idx_action_type (action_type),
INDEX idx_timestamp (timestamp)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================================
-- TABLE 4 : fraud_alerts
-- ============================================================================
DROP TABLE IF EXISTS fraud_alerts;
CREATE TABLE fraud_alerts (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
id_tentative INT(11) NOT NULL,
alert_type ENUM(
'multi_connexion',
'ip_changee',
'machine_changee',
'timing_suspect',
'reponses_identiques',
'macro_modifiee',
'fichier_modifie',
'autre'
) NOT NULL,
severity ENUM('low', 'medium', 'high', 'critical') NOT NULL DEFAULT 'medium',
alert_message TEXT NOT NULL,
alert_details JSON,
detected_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_reviewed BOOLEAN DEFAULT FALSE,
reviewed_at TIMESTAMP NULL,
reviewed_by INT(11) NULL,
review_notes TEXT,
FOREIGN KEY (id_tentative) REFERENCES tentatives_eleves(id_tentative) ON DELETE CASCADE,
FOREIGN KEY (reviewed_by) REFERENCES utilisateurs(id_utilisateur) ON DELETE SET NULL,
INDEX idx_tentative (id_tentative),
INDEX idx_alert_type (alert_type),
INDEX idx_severity (severity),
INDEX idx_detected_at (detected_at),
INDEX idx_is_reviewed (is_reviewed),
INDEX idx_reviewed_by (reviewed_by)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================================
-- VÉRIFICATION
-- ============================================================================
SELECT '✅ Tables créées avec succès !' AS status;
SHOW TABLES LIKE '%calc%';
SELECT
TABLE_NAME,
ENGINE,
TABLE_ROWS,
TABLE_COLLATION
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'mathematiques_db'
AND TABLE_NAME IN ('sessions_calc', 'reponses_calc', 'logs_actions', 'fraud_alerts');
-- ============================================================================
-- FIN DU SCRIPT
-- ============================================================================