185 lines
5.9 KiB
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
|
|
-- ============================================================================
|