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.
- Notions
- Questions
- Ranger et relier
- Les chiffres
- Les étapes
- Mises en situation
- 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,
psycopgpour 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. AvecWHERE 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.