Escape Game

Phase 3 : Vues et contrôle d’accès

Durée45 minutes

Mission

Suite aux événements des phases précédentes, la direction souhaite mettre en place une meilleure organisation de l’accès aux données pour l’équipe du support client. Actuellement, chaque agent doit écrire ses propres requêtes SQL pour consulter les transactions des clients, ce qui est à la fois inefficace et risqué.

Votre mission est de créer une vue adaptée aux besoins du support client et de mettre en place les droits d’accès appropriés.

Commencez par créer un notebook, copiez/collez le code suivant dans la première cellule et exécutez-la :

%reload_ext sql
%sql postgresql://user_tp:ue_info_reseaux_db@localhost/ue_info_reseaux_db
%config SqlMagic.displaylimit = None

Énigme 6 : Sécurisation des accès du support client

Objectif 1 : Création d’une vue

Situation : Les agents du support client passent beaucoup de temps à écrire des requêtes complexes pour obtenir une vision complète des transactions d’un client. Ils ont besoin de voir dans une seule vue : les informations du client, le montant total de ses achats, sa dernière transaction et le nombre total de ses transactions.

Mission : Créez une vue nommée customer_transaction_summary qui fournira aux agents une vision consolidée des informations client et de leurs transactions. Cette vue devra présenter les données dans un format clair et directement utilisable.

Information

Les vues sont particulièrement utiles pour :

  • Simplifier l’accès aux données en masquant la complexité des requêtes
  • Standardiser la présentation des informations
  • Améliorer l’efficacité du travail des équipes

Voici un exemple simple de création de vue avec agrégation :

-- Cette vue analyse les prix et marges des marchands
CREATE VIEW exemple_vue_marchands AS
SELECT 
    mp.merchant_id,                   -- Identifiant du marchand
    p.product_name,                   -- Nom du produit
    mp.price as prix_vente,          -- Prix fixé par le marchand
    mp.available_quantity as stock,   -- Stock disponible
    p.base_price as prix_catalogue,   -- Prix catalogue recommandé
    -- Calcul de la marge en pourcentage, arrondie à 2 décimales
    ROUND(((mp.price - p.base_price) / p.base_price * 100)::numeric, 2) as marge_pourcentage
FROM merchant_products mp
JOIN products p ON mp.product_id = p.product_id
WHERE mp.available_quantity > 0;      -- Ne montre que les produits en stock

Cette vue est particulièrement utile pour l’analyse des prix : elle permet de comparer rapidement les prix pratiqués par chaque marchand par rapport au prix catalogue et de calculer leur marge. Elle ne montre que les produits en stock pour faciliter la gestion des approvisionnements.

Pour utiliser cette vue :

SELECT * FROM exemple_vue_marchands ORDER BY merchant_id;

Créez une vue customer_transaction_summary qui devra inclure pour chaque client :

  1. Les informations de base (id, nom, email)
  2. Le nombre total de transactions
  3. Le montant total des achats
  4. La date de la dernière transaction
  5. Le montant moyen des transactions

Pensez à utiliser les fonctions COUNT, SUM, AVG avec un GROUP BY approprié.

Pour valider cet objectif, exécutez la requête suivante sur votre vue :

SELECT * FROM customer_transaction_summary 
WHERE total_amount > 260000 
ORDER BY last_transaction_date DESC 
LIMIT 1;

Notez le customer_id retourné.

Objectif 2 : Configuration des droits d’accès

Situation : Maintenant que la vue est créée, nous devons nous assurer que les agents du support client y ont accès, tout en restreignant leur accès aux tables sources pour des raisons de sécurité.

Mission : Créez un rôle support_agent qui aura uniquement accès en lecture à la vue customer_transaction_summary, sans aucun accès direct aux autres tables.

Information

La gestion des droits d’accès permet de :

  • Contrôler précisément ce que chaque utilisateur peut voir
  • Protéger les données sensibles
  • Simplifier l’administration des accès

Voici un exemple de création de rôle avec droits limités :

-- Création du rôle
CREATE ROLE exemple_role;

-- Attribution du droit de lecture sur une vue spécifique
GRANT SELECT ON ma_vue TO exemple_role;

-- Test des droits
SET ROLE exemple_role;
SELECT * FROM ma_vue LIMIT 1;  -- devrait fonctionner
SELECT * FROM table_source;     -- devrait échouer

Pour pouvoir modifiez les droits vous allez devoir vous reconnecter en tant qu’admin à la base de données en executant le code suivant :

%reload_ext sql
%sql postgresql://postgres@localhost/ue_info_reseaux_db
%config SqlMagic.displaylimit = None

Configurez le rôle support_agent en :

  1. Créant le rôle
  2. Donnant uniquement les droits de lecture sur la vue
  3. Vérifiant que l’accès direct aux tables est impossible

N’oubliez pas de tester les restrictions d’accès avec SET ROLE et en essayant d’accéder aux tables sources.

Pensez-bien à interdire les accès à tous les tables sauf la vue.

Pour valider cet objectif, essayez d’accéder à la table customers avec le rôle support_agent :

SELECT * FROM customers LIMIT 1;

Notez le nom de l’erreur retournée (le mot après psycopg2.errors.).

Validez vos réponses

Terminé !

Félicitations ! Vous avez mis en place une vue efficace pour le support client et sécurisé son accès. Cette structure permettra aux agents de travailler plus efficacement tout en maintenant un niveau de sécurité approprié.