Sécurité de la couche données vs. de la couche application

Mis à jour : septembre 2026

La sécurité de la couche application est un gardien dans votre code ; celle de la couche de données, un gardien sur les données elles-mêmes. Il faut les deux. Ce ne sont pas des synonymes, même si certains glossaires pourtant bien classés les mélangent : la couche application sécurise le comportement (authentification, validation, règles métier), la couche de données sécurise l’information stockée (politiques, ACL, chiffrement) contre tous les chemins d’accès — y compris ceux que votre code ne voit jamais.

Points clés

QuestionRéponse
Couche applicationDes règles dans le code : authn, validation, autorisation liée au workflow
Couche de donnéesDes règles sur les données : politiques, ACL, chiffrement, audit — sur chaque chemin d’accès
La défaillance classiqueUn endpoint oublie son contrôle de propriété — l’IDOR, n° 1 de l’OWASP
Le principeDéfense en profondeur : les couches échouent différemment, alors empilez-les
La règle de placementLes règles de workflow dans le code ; les règles structurelles sur les données

Le bug qui résume tout le débat

Le contrôle dans la couche application est correct — jusqu’à ce que quelqu’un oublie de le répéter :

// Endpoint un : le contrôle de propriété, présent et correct
app.get('/contracts/:id', async (req, res) => {
  const contract = await db.contracts.findById(req.params.id);
  if (contract.ownerId !== req.user.id) return res.status(403).end();
  res.json(contract);
});

// Endpoint deux, trois sprints plus tard, dans un autre fichier :
app.get('/contracts/:id/export', async (req, res) => {
  const contract = await db.contracts.findById(req.params.id);
  res.send(toPdf(contract));   // ← personne n'a réécrit le contrôle. IDOR en production.
});

L’application des règles dans la couche de données inverse la défaillance : la règle voyage avec la ligne, donc le contrôle oublié n’a plus rien à oublier —

// JavaScript / Node.js — Back4app JS SDK
// Data-layer enforcement: the rule travels with the row, not the code path
const doc = await new Parse.Query('Contract').get(contractId); // someone else's row
doc.set('total', 0);
try {
  await doc.save(); // rejected by the object's ACL — server-side, every path
} catch (e) {
  console.log(e.code); // 101: object not found for update
}

Défense en profondeur : superposer les couches de sécurité autour des données stockées

Défense en profondeur autour des données stockéesLes requêtes traversent les défenses réseau, puis les contrôles de la couche application comme l'authentification, la validation et l'autorisation métier, et enfin les contrôles de la couche de données — politiques, ACL et chiffrement — qui couvrent aussi les chemins qui contournent entièrement l'application.

Couche réseau
TLS, pare-feu, gateways

Couche application
authn · validation · authz du workflow

Couche de données
politiques · ACL · chiffrement · audit

Chemins de contournement :
SQL d'admin, outils de BI, jobs, seconds services

Les requêtes traversent les défenses réseau, puis les contrôles de la couche application comme l'authentification, la validation et l'autorisation métier, et enfin les contrôles de la couche de données — politiques, ACL et chiffrement — qui couvrent aussi les chemins qui contournent entièrement l'application.

La flèche en pointillés est l’argument : tout ce qui contourne votre application se heurte quand même à la couche de données — c’est pourquoi des règles qui ne vivent que dans les contrôleurs protègent une seule porte d’une pièce qui en compte beaucoup. C’est la défense en profondeur appliquée au stockage : des barrières qui se chevauchent et qui échouent différemment.

Couche de données vs. couche application : qui fait quoi

FonctionCouche applicationCouche de données
AuthentificationSessions, tokens, flux de connexionFait confiance à l’identité propagée
Validation des entréesPremière et principale ligne de défenseTypes et contraintes en filet de sécurité
Autorisation liée au workflow”Ce rôle peut-il faire cette action maintenant ?”Mauvaise adéquation — à tenir à l’écart
Autorisation structurelleContrôles de confortPolitiques, ACL — le mur réellement appliqué
ChiffrementDans l’app, pour séparer les clésAu repos et par champ
AuditÉvénements métierChaque accès, chaque chemin

Deux lignes portent tout le débat. Les règles de workflow — chaînes d’approbation, machines à états, plafonds — ont besoin d’un contexte que seul le code possède ; les forcer dans des prédicats de ligne produit une soupe de politiques impossible à maintenir. Les règles structurelles — propriété, appartenance au tenant, visibilité — sont exactement ce que les politiques par ligne et les ACL par objet appliquent sans exiger de discipline endpoint par endpoint. Placez chaque règle là où son mode de défaillance reste survivable.

IDOR : le débat des couches, liste de CVE à l’appui

La défaillance de contrôle d’accès classée en tête — et n° 1 de la liste spécifique aux API — est précisément le contrôle oublié du code ci-dessus : des utilisateurs authentifiés qui récupèrent des objets par ID sans aucune autorisation par objet. Les pages sécurité cataloguent la vulnérabilité ; les pages architecture cataloguent les couches ; c’est le lien entre les deux qui est utile : l’IDOR, c’est ce à quoi ressemble à grande échelle une sécurité appliquée uniquement dans l’app, et les politiques de la couche de données en sont le correctif structurel, parce que le contrôle manquant se solde par un refus au lieu d’une porte ouverte.

Comment le BaaS déplace la frontière

Les plateformes de Backend as a Service rendent la thèse de cet article architecturale : avec des clients qui parlent (presque) directement au service de données, il n’existe plus de couche de contrôleurs écrits à la main pour porter les contrôles — l’autorisation doit donc vivre dans des constructions de la couche de données. Les ACL par objet portent la propriété, les permissions au niveau de la classe encadrent les opérations par schéma, et la plateforme applique les deux à chaque requête, quelle que soit la surface d’où elle vient. La couche application ne disparaît pas ; elle se déplace dans des fonctions côté serveur qui portent la validation et les règles de workflow — la séparation en deux couches, imposée par conception plutôt que par discipline.

Cas d’usage courants

  • SaaS multi-tenant. L’appartenance au tenant est la règle structurelle canonique — appliquée dans la couche de données, testée de façon adversariale, jamais confiée à des clauses WHERE.
  • Enregistrements appartenant aux utilisateurs. Messages, documents, commandes : la propriété est portée par la ligne via les ACL ; le code de l’app reste lisible, les données restent scellées.
  • Accès analytique et BI. Le chemin de contournement rendu sûr : les analystes interrogent directement des répliques et ne voient que ce que les règles de la couche de données autorisent.
  • Preuves de conformité. Les auditeurs préfèrent des contrôles démontrables dans la couche de données à des renvois vers le code applicatif.
  • Workflows d’approbation. Le contre-exemple : les règles métier qui dépendent d’un état vivent dans la logique applicative — avec les règles structurelles qui tiennent toujours en dessous.

Où chaque règle doit-elle vivre ? Matrice de décision

Placez-la dans le code applicatif quand…Placez-la dans la couche de données quand…
La règle a besoin du contexte ou de l’état du workflowLa règle porte sur la propriété, le tenant ou la visibilité
Elle traverse des services et des effets de bordElle doit tenir sur chaque chemin, contournements compris
Elle change au fil des itérations produitSon échec signifie une brèche, pas un bug
Des erreurs riches et des parcours UX comptentÉchouer en refusant, silencieusement, est souhaitable
C’est une politique métierC’est un invariant structurel

Et la règle permanente au-dessus des deux colonnes : les couches se combinent en ET, pas en OU — gardez les contrôles de la couche application pour la clarté et l’UX, et laissez la couche de données rendre leur absence survivable.

Limites et trade-offs

  • Tout dans le code applicatif : logique dupliquée d’un endpoint à l’autre, dérive entre microservices et tous les chemins de contournement sans protection — l’usine à IDOR.
  • Tout dans les données : des règles invisibles qui déroutent ceux qui déboguent, un coût d’évaluation par ligne, des subtilités de contexte avec le pooling et une logique métier contorsionnée en prédicats.
  • Les deux ensemble coûtent de la coordination. Deux endroits à mettre à jour quand une règle change ; gardez les règles structurelles peu nombreuses, stables et documentées.
  • Le placement du chiffrement est un vrai embranchement. Côté base, il est transparent et interrogeable ; côté application, il sépare les clés mais complique les requêtes — décidez champ par champ, menace par menace.
  • La frontière elle-même doit être auditée. Quiconque détient des identifiants de contournement — rôles d’admin, master keys — se tient hors de tous les cercles ; cette liste est le véritable périmètre.

Les deux couches sur Back4app

Back4app est une plateforme open-source de Backend as a Service (BaaS) qui combine une base de données gérée, des API REST et GraphQL générées automatiquement, l’authentification, le stockage de fichiers et des fonctions serverless avec Cloud Code. Elle livre la conclusion de cet article comme architecture par défaut : la couche de données porte les règles structurelles — ACL par objet, permissions au niveau de la classe, champs protégés, appliqués côté serveur à chaque requête — tandis que les triggers Cloud Code portent la part de la couche application : validation, enrichissement et contrôles de workflow qui s’exécutent avant qu’une écriture n’aboutisse. Le bug du filtre oublié n’a aucun chemin pour passer, et les règles métier gardent un endroit où vivre.

Questions fréquentes

Quelle est la différence entre la sécurité de la couche application et celle de la couche de données ?

La couche application sécurise le comportement : authentification, gestion des sessions, validation des entrées et contrôles de logique métier écrits dans votre code. La couche de données sécurise l'information stockée elle-même : chiffrement, politiques d'accès, règles au niveau des lignes et audit, qui tiennent quel que soit le client ou le chemin de code qui touche les données. Ce sont des couches distinctes — certains glossaires les confondent, et c'est exactement ainsi que naissent les failles.

La sécurité applicative suffit-elle si la base de données se trouve derrière l'application ?

Non — et c'est le consensus de tous les traitements sérieux du sujet. Tout ce qui atteint la base de données sans passer par la logique de votre application contourne chaque règle écrite là : clients SQL d'administration, outils de BI et d'analytique, jobs en arrière-plan, migrations, un second service qui partage la base. Les règles de la couche application protègent une porte ; la couche de données protège la pièce.

Où appliquer l'autorisation — dans le code applicatif ou dans la base de données ?

Par couches, selon le type de règle. Les règles métier riches en contexte ("les managers approuvent les factures sous leur plafond") ont leur place dans le code applicatif, au plus près du workflow. Les règles structurelles ("les utilisateurs ne voient que leurs lignes", "les tenants ne se croisent jamais") ont leur place dans la couche de données — des politiques ou des ACL qu'on ne peut pas oublier endpoint par endpoint. Jamais côté client. La réponse mature est une affaire de placement, pas d'allégeance.

Qu'est-ce que l'IDOR et quelle couche l'empêche ?

Insecure Direct Object Reference — récupérer un objet par son ID sans vérifier que l'appelant a le droit d'y accéder, la classe de vulnérabilité d'API classée en tête des listes de l'OWASP. Le correctif immédiat est un contrôle de propriété dans la couche application, sur chaque endpoint ; le correctif structurel est l'application des règles dans la couche de données, où le contrôle manquant se solde par un refus, parce que la ligne elle-même rejette l'accès non autorisé.

Qu'est-ce que la défense en profondeur ?

Le principe selon lequel aucun contrôle ne doit être le seul rempart — plusieurs barrières qui se chevauchent, pour qu'une défaillance dans une couche soit rattrapée par la suivante. Appliqué ici : validez et autorisez dans l'application, et appliquez quand même le contrôle d'accès dans la couche de données. Les couches ne sont pas redondantes ; elles échouent différemment, et c'est tout l'intérêt.

Faut-il chiffrer les données dans la couche application ou dans la base de données ?

Selon le modèle de menace, souvent les deux. Le chiffrement au repos au niveau de la base protège les disques volés et les sauvegardes, mais reste transparent pour toute application compromise. Le chiffrement dans la couche application tient les clés entièrement à l'écart de la base, ce qui protège contre une compromission côté base de données, au prix de la possibilité de recherche. Le chiffrement en transit est le minimum à chaque saut.

Quels sont les inconvénients d'appliquer la sécurité dans la base de données ?

Ils sont réels, et mieux vaut les gérer que les nier : les politiques sont invisibles dans le code applicatif, si bien que déboguer "où sont passées mes lignes ?" demande de la discipline ; l'évaluation des politiques ligne par ligne a un coût en performances ; le contexte de tenant porté par la session interagit subtilement avec le pooling de connexions ; et les workflows métier complexes s'expriment mal sous forme de prédicats de ligne. Les règles structurelles s'y épanouissent ; les règles de workflow, non.

Comment les plateformes BaaS changent-elles l'endroit où vit la sécurité ?

Elles font disparaître la couche intermédiaire de confiance : les clients parlent presque directement au service de données, donc l'autorisation doit vivre dans des constructions de la couche de données — ACL par objet, permissions au niveau de la classe, politiques par ligne — plutôt que dans des contrôles écrits à la main dans des contrôleurs. Ce n'est pas une faiblesse, c'est le modèle : la plateforme applique les règles déclarées à chaque requête, et les fonctions côté serveur prennent en charge le reste de la logique métier.

Termes associés

À comparer avec

Lectures recommandées

Prêt à construire votre backend ?

Lancez votre projet sur Back4app en quelques minutes — base de données, authentification, API et Cloud Code inclus. Sans carte bancaire.

Écrit et révisé par Back4app Engineering, Back4app Engineering · Publié le 2026-09-15