Connexion et requêtes préparées

Accéder à une base depuis un programme : pilote, chaîne de connexion, cycle ouvrir, préparer, lier, exécuter, parcourir, fermer ; requête préparée contre concaténation, injection SQL et fermeture des ressources.

  • 34 cartes
  • 7 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Les chiffres
  5. Les étapes
  6. Mises en situation
  7. Comprendre

Quelques cartes du deck

  • Pilote de base de données : de quoi s'agit-il ?

    Voir la réponse

    Bibliothèque qui sait parler le protocole d'un système de gestion de base de données précis et expose au programme une interface pour envoyer des requêtes et lire les réponses.

    Le programme ne dialogue jamais directement avec le serveur : c'est le pilote (un pilote JDBC en Java, psycopg pour PostgreSQL en Python) qui ouvre le canal vers le serveur et traduit les appels.

  • Qu'affiche ce programme ?

    ```python
    import sqlite3
    c = sqlite3.connect(":memory:")
    c.execute("CREATE TABLE compte (id INTEGER PRIMARY KEY, email TEXT)")
    c.executemany("INSERT INTO compte (email) VALUES (?)", [("a@x.fr",), ("b@x.fr",), ("c@x.fr",)])
    saisie = "' OR '1'='1"
    q = "SELECT id FROM compte WHERE email = '" + saisie + "'"
    print(c.execute(q).fetchall())
    `

    • [(1,), (2,), (3,)]
    • []
    • [(1,)]
    • une OperationalError à cause de l'apostrophe
    Voir la réponse

    [(1,), (2,), (3,)]

    La requête devient WHERE email = '' OR '1'='1' : la condition est toujours vraie, donc toutes les lignes sont rendues. Avec WHERE email = ? et la saisie en paramètre, le résultat serait [].

  • Dans une requête préparée, le texte SQL est envoyé avec des …, puis les valeurs sont … à part avant l'exécution.

    Voir la réponse

    Dans une requête préparée, le texte SQL est envoyé avec des emplacements, puis les valeurs sont liées à part avant l'exécution.

    Les deux temps sont distincts : le serveur connaît la forme de la requête avant de recevoir la moindre donnée.

  • Connexion à une base : de quoi s'agit-il ?

    Voir la réponse

    Canal ouvert entre le programme et le serveur de base de données, authentifié, par lequel passent les requêtes et les résultats.

    Une connexion occupe une ressource du serveur, dont le nombre est limité : on la ferme dès qu'on n'en a plus besoin.