Base de données 2

Les concepts de base de données sont transférables d'un écosystème à l'autre, mais il est important de se familiariser avec leur implémentation spécifique dans la plateforme utilisée. Vous aurez l'occasion d'expérimenter les mécaniques de quelques enjeux de base de données dans l'écosystème Rails/MariaDB de ce projet de départ.

Schéma sommaire

Comparez différents mécanismes permettant de constater la structure de la base de données

  • Migrations
  • Fichier Schema
    • Ruby
    • SQL
  • mariadb dump
    • Seulement la structure des tables, sans la création de la base de données ET sans les données
    • Exclure les tables ar_internal_metadata et schema_migrations

Élaborez le schéma sommaire des tables applicatives de la base de données.

  • Identifier les tables et les multiplicités
  • Mettre en évidence et identifier les colonnes qui construisent une relation polymorphique

👉 Livrables

  • schema.rb
  • structure.sql
  • Commande mariadb-dump dans remise.md
  • Schéma sommaire

Instrumentation

Par défaut, Rails affiche les requêtes SQL dans la console du serveur

Il existe également un utilitaire s'intégrant directement à la page web (attention! entre en conflit avec prettifier)

Un utilitaire Ruby permet de mesurer les performances lors de l'exécution

Une autre approche consiste à analyser le code via un outil qui repère certains patterns d'implémentation

ou de rédaction

👉 Livrables?

  • Expérimenter!

Intégrité

La base de données est le dernier rempart de l'intégrité(relationnelle ET données), toutefois, les mécanismes logiciels facilitent grandement l'implémentation des fonctionnalités applicatives.

👉 Livrables

  • Identifier et corriger les manquements dans l'implémentation rigoureuse des modèles Rails pour correspondre à la base de données MariaDB
  • Quel est l'impact des dependent: :destroy dans les modèles? Sur les belongs_to vs has_...? Noter le constat dans remise.md

Failles

Lorsqu'on accepte des données externes(url, formulaire, etc.), on doit faire preuve d'une grande prudence en les traitant dans le code applicatif, et ce peut-importe la technologie.

Les traitements en lien avec la base de données représentent une porte d'entrée permettant aux acteurs malicieux de récupérer des données qu'il ne devrait pas voir ou d'introduire des valeurs indésirables dans le système.

Rails offre des mécanismes permettant de prévenir ces vulnérabilités, mais ils doivent être utilisé de façon délibérée.

👉 Livrable

  • Inspecter le contrôleurArticles et corriger les vulnérabilités de type
    • SQL Injection
    • Insecure Direct Object Access
    • Mass Assignment
  • Choisir un autre type de faille et expliquer à l'aide d'un exemple concret en quoi elle s'applique au développement d'applications web/APIs.
  • Fournir le contexte et la commande fetch/cURL/wget qui permet de constater de façon significative chaque faille dans remise.md


ATTENTION

Analyser attentivement la grille de correction pour sélectionner les items à réaliser dans la section suivante

Données de test

Pour permettre une analyse exhaustive des interactions d'une application avec la base de données, il est judicieux de reproduire un environnement de test représentatif des données réelles, ou à tout le moins du même ordre de grandeur.

bash
Permettre la récursion massive
copier
# https://mariadb.com/kb/en/server-system-variables/#max_recursive_iterations

echo 'max-recursive-iterations = 4294967295' >> /etc/mysql/mariadb.conf.d/50-server.cnf
systemctl restart mariadb

👉 Livrables

  • Implémenter l'insertion de données massives via SQL dans seed.rb et mesurez le temps requis vs Ruby
  • Récapitulatif des mesures dans remise.md

SQL brut

Élaborez un rapport présentant des statistiques pertinentes des données de l'application en comparant l'implémentation en SQL brut via les méthodes

👉 Livrable

  • Implémentation du rapport au format JSON dans ReportController
  • Récapitulatif de find_by_sql VS database statement dans remise.md

N + 1

Les requêtes N + 1 peuvent être une source de ralentissement majeur dans la récupération des données. Rails offre plusieurs mécanismes pour résoudre cette problématique

Corrigez le chargement des données de la méthode articles#index en mesurant l'impact des vos modifications

👉 Livrables

  • Implémentation du code corrigeant la N + 1
  • Récapitulatif des mesures dans remise.md

Dénormalisation

On peut appliquer des notions de dénormalisation pour accélérer certaines récupérations de données, Rails fourni un raccourci pour les compteurs

👉 Livrable

  • Implémentation du counter cache pour le nombre de commentaires d'un article, en mesurant l'impact du changement
  • Récapitulatif des mesures dans remise.md

Remise

Vous devez présenter une démonstration fonctionnelle de votre implémentation et expliquer les éléments demandés avant vendredi 31 janvier @ 15h

Base de données 2

Nom:

Schéma sommaire
Schemas; ruby, sql 1     0.5     0
Commande mariadb-dump 1     0.5     0
Diagramme; table, multiplicité, polymorphisme 2     1.5     1     0
Intégrité
Implémentation 2     1.5     1     0
Documentation 1     0.5     0
Failles
Correctifs SQLi, IDOR, Mass Assign 2     1.5     1     0
Documentation 1     0.5     0
Données de test OU SQL Brut
Implémentation 2     1.5     1     0
Documentation 1     0.5     0
N + 1 OU Dénormalisation
Implémentation 2     1.5     1     0
Documentation 1     0.5     0
BONUS
Implémentation adéquate des sujets supplémentaires en extra
+2     0