Escape Game

Documentation de la base de données

Tables transactionnelles

La table customers constitue la pierre angulaire du système. Elle conserve non seulement les informations essentielles des clients comme leur nom et email, mais également leur historique de création de compte et dernière connexion. Les clients peuvent avoir différents statuts (ACTIVE, SUSPENDED, UNDER_REVIEW) permettant de gérer leur accès à la plateforme. Voici un exemple des données :

SELECT customer_id, name, email, created_at, status 
FROM customers 
LIMIT 3;
customer_id | name         | email                  | created_at  | status
1          | Jean Martin  | jean.martin@email.com  | 2024-01-01 | ACTIVE
2          | Marie Durand | marie.durand@email.com | 2024-01-02 | ACTIVE
3          | Pierre Dubois| pierre.dubois@email.com| 2024-01-03 | ACTIVE

La table transactions enregistre l’ensemble des opérations financières sur la plateforme. Chaque transaction est horodatée et associée à un client, avec des informations cruciales comme le montant, l’adresse IP source et le statut. Les transactions normales proviennent généralement du réseau interne (192.168.x.x) :

SELECT t.transaction_id, c.name, t.amount, t.transaction_date, t.status, t.ip_address
FROM transactions t
JOIN customers c ON t.customer_id = c.customer_id
LIMIT 3;
transaction_id | name        | amount  | transaction_date     | status    | ip_address
1             | Jean Martin | 100.50  | 2024-03-15 10:00:00 | COMPLETED | 192.168.1.100
2             | Marie Durand| 250.75  | 2024-03-15 11:30:00 | COMPLETED | 192.168.1.101
3             | John Smith  | 3000.00 | 2024-03-15 02:15:00 | COMPLETED | 45.123.45.67

La table login_attempts joue un rôle crucial dans la sécurité en enregistrant chaque tentative de connexion, qu’elle soit réussie ou non. Elle stocke l’adresse IP, l’agent utilisateur et l’horodatage précis de chaque tentative :

SELECT customer_id, attempt_date, success, ip_address, user_agent
FROM login_attempts
WHERE attempt_date >= '2024-03-15'
ORDER BY attempt_date
LIMIT 3;
customer_id | attempt_date          | success | ip_address    | user_agent
4          | 2024-03-15 02:00:00  | false   | 45.123.45.67  | Mozilla/5.0
4          | 2024-03-15 02:01:00  | false   | 45.123.45.67  | Mozilla/5.0
4          | 2024-03-15 02:02:00  | true    | 45.123.45.67  | Mozilla/5.0

Tables de référence

La table transaction_details fournit une vue granulaire de chaque transaction en détaillant les produits achetés, leur quantité et leur prix unitaire. Cette précision permet de mieux analyser les patterns d’achat suspects :

SELECT td.transaction_id, td.product_name, td.quantity, td.unit_price, 
       td.quantity * td.unit_price as total_price
FROM transaction_details td
JOIN transactions t ON td.transaction_id = t.transaction_id
LIMIT 3;
transaction_id | product_name     | quantity | unit_price | total_price
1             | Product 42       | 2        | 50.25      | 100.50
2             | Product 15       | 1        | 250.75     | 250.75
3             | Product 89       | 5        | 600.00     | 3000.00

La table locations permet de gérer la géolocalisation des clients et de définir les plages d’IP légitimes pour chaque région. Elle est essentielle pour détecter les connexions provenant de zones inhabituelles.

Tables de sécurité

La table security_questions renforce la sécurité des comptes en stockant les questions de sécurité et leurs réponses hachées pour chaque client. Ces questions sont utilisées pour la vérification d’identité lors des activités sensibles ou des réinitialisations de mot de passe :

SELECT c.name, sq.question, sq.created_at, sq.last_updated
FROM security_questions sq
JOIN customers c ON sq.customer_id = c.customer_id
LIMIT 3;
name         | question                          | created_at           | last_updated
Jean Martin  | Nom de votre premier animal ?     | 2024-01-01 10:00:00 | 2024-01-01 10:00:00
Marie Durand | Ville de naissance de votre mère? | 2024-01-02 14:30:00 | 2024-01-02 14:30:00
Pierre Dubois| Modèle de votre première voiture? | 2024-01-03 09:15:00 | 2024-01-03 09:15:00

Le système d’audit s’appuie sur les tables security_alerts et audit_log. Les alertes de sécurité sont classées par type et niveau de sévérité, tandis que le log d’audit conserve une trace détaillée de toutes les modifications apportées aux données sensibles, incluant les anciennes et nouvelles valeurs au format JSON.

Cette structure de base de données permet une traçabilité complète des activités et facilite la détection d’anomalies, comme vous le découvrirez dans la Phase 1 de l’investigation.