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.
Comparez différents mécanismes permettant de constater la structure de la base de données
ar_internal_metadata
et schema_migrations
Élaborez le schéma sommaire des tables applicatives de la base de données.
👉 Livrables
schema.rb
structure.sql
mariadb-dump
dans remise.md
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?
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
dependent: :destroy
dans les modèles? Sur les belongs_to vs has_...? Noter le constat dans remise.md
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
Articles
et corriger les vulnérabilités de type
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
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.
# 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
seed.rb
et mesurez le temps requis vs Rubyremise.md
É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
ReportController
remise.md
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
remise.md
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
remise.md
Vous devez présenter une démonstration fonctionnelle de votre implémentation et expliquer les éléments demandés avant vendredi 31 janvier @ 15h
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 |