4. LE LANGAGE SQL AVANCE 2e partie 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4. LE LANGAGE SQL AVANCE 2e partie Version 2 - Janvier 2012 Support du chapitre 9, Le langage SQL avancé de l'ouvrage Bases de données, J-L Hainaut, Dunod 2009. II. Utilisation des bases de données
4. LE LANGAGE SQL AVANCE (2) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4. LE LANGAGE SQL AVANCE (2) . . . . 4.9 Le catalogue 4.10 Les interfaces SQL des programmes d'application 4.11 SQL et l'information incomplète Contenu II. Utilisation des bases de données
4.9 Le catalogue 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.9 Le catalogue II. Utilisation des bases de données
1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.9 Le catalogue Le catalogue d'une base de données est un ensemble de tables décrivant le schéma de cette base de données. Il comprend notamment : une table répertoriant les tables de la base de données une table décrivant les colonnes de ces tables une table décrivant les clés (PK et FK) et une autre décrivant leurs composants une table décrivant les vues une table décrivant les utilisateurs et une autre décrivant les privilèges et plusieurs dizaines d'autres tables ... II. Utilisation des bases de données
1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.9 Le catalogue La table des tables (SYS_TABLE) et la table des colonnes (SYS_COLUMN) description de la table SYS_TABLE ! R = réelle/de base V = virtuelle/vue null admis ? Y/N II. Utilisation des bases de données
1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.9 Le catalogue La table des clés (SYS_KEY) et la table des composants (SYS_KEY_COMP) P = primary F = foreign PK référencée par la FK n° d'ordre de la colonne dans la clé II. Utilisation des bases de données
4.9 Le catalogue Observations : 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.9 Le catalogue Observations : ces tables contiennent leur propre description ces tables peuvent être consultées comme toute autre table mais ... il n'est pas possible de les modifier directement via les requêtes de modification (comment faire alors ?) aucune contrainte n'est déclarée (pourquoi ?) le principal utilisateur du catalogue est le SGBD lui-même Autres appellations : dictionnaire de données métadonnées (et leur métaschéma) II. Utilisation des bases de données
Quelles sont les colonnes de la table DETAIL ? 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.9 Le catalogue Utilisation (1) Quelles sont les colonnes de la table DETAIL ? select CNAME, CTYPE, LEN1, NULLS from SYS_COLUMN where TNAME = 'DETAIL'; Dans quelles tables de base existe-t-il des colonnes dont le nom commence par 'NCOM' ? select TNAME from SYS_TABLE where TNAME in (select TNAME from SYS_COLUMN where CNAME like 'NCOM%') and TTYPE = 'R'; II. Utilisation des bases de données
4.9 Le catalogue Utilisation (2) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.9 Le catalogue Utilisation (2) Quelles sont les propriétaires des tables référencées par la table DETAIL ? select distinct CREATOR from SYS_TABLE where TNAME in (select TNAME from SYS_KEY where KEYID in (select KTARG where TNAME = 'DETAIL')); II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application a) Introduction b) Les modèles d'API c) SQLJ d) JDBC e) Un problème de sécurité Contenu II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - Introduction 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Introduction Toute commande SQL peut être insérée dans un programme d’application, dit programme hôte, rédigé dans un langage hôte classique. Elle est transmise au SGBD au moment de son exécution. La plupart des requêtes SQL sont émises par les programmes d'application et non par des étudiants en apprentissage ! Un programme est formé d'instructions du langage hôte (Java, C, COBOL, PHP, etc.) et d'instructions SQL. Comment organiser la cohabitation de ces deux langages ? Via une API (application programming interface) SQL. II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - Introduction 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Introduction Toute commande SQL peut être vue comme une fonction dotée de paramètres input/output (données/résultats): select NCLI, NOM from CLIENT where LOCALITE = 'Toulouse' and CAT = 'B1' données résultats update PRODUIT set PRIX = 110 where NPRO = 'PA45' données résultats (OK / error) II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - Introduction 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Introduction On remplace les constantes par des variables du programme hôte : select NCLI, NOM into :R1, :R2 from CLIENT where LOCALITE = :D1 and CAT = :D2 données résultats D1 = 'Toulouse'; D2 = 'B1'; select NCLI, NOM into :R1, :R2 from CLIENT where LOCALITE = :D1 and CAT = :D2; display R1, R2; acquisition des données instruction SQL exploitation des résultats on suppose que le résultat comporte une seule ligne II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - Introduction 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Introduction Les variables communes connues par le programme hôte et par l'instruction SQL doivent être déclarées; les instructions SQL doivent être clairement identifiées par des balises : exec SQL begin declare section ; NUM char(10); NOM char(32); LOC char(30); exec SQL end declare section ; NUM = 'C400'; exec SQL select NOM, LOCALITE into :NOM, :LOC from CLIENT where NCLI = :NUM ; display NOM, LOC; instructions SQL entre balises instructions en langage hôte II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - Introduction 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Introduction OK pour les instructions concernant 1 ligne. Quid des requêtes qui renvoient plusieurs lignes ? Pattern standard de traitement d'un fichier séquentiel : déclarer le fichier F ... ouvrir F lire le prochain enregistrement tant que la lecture a réussi, faire <traiter l’enregistrement courant> fin fermer F II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - Introduction 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Introduction En SQL : fichier F déclarer un fichier ouvrir le fichier enregistrement lire le prochain enregistrement lecture réussie fermer le fichier = requête Q attachée à un curseur F declare cursor F open F ligne du résultat de Q associé à F fetch F SQLCODE = 0 close F curseur = alias du résultat de la requête Q mais aussi indicateur du prochain enregistrement II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - Introduction 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Introduction exec SQL begin declare section ; varNOM char(32); varLOC char(30); varNCLI char(12); exec SQL end declare section ; variables communes exec SQL declare F cursor for select NCLI, NOM from CLIENT where LOCALITE = :varLOC; varLOC := "Toulouse"; exec SQL open F; exec SQL fetch F into :varNCLI,:varNOM; while SQLCODE = 0 do <traiter les valeurs de varNCLI et varNOM> endwhile; exec SQL close F; déclarer F ouvrir F lire prochaine ligne de F lecture réussie fermer F II. Utilisation des bases de données
1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Les modèles d'API L'exemple introductif relève de l'interface SQL statique intégrée. Il y en existe d'autres ... II. Utilisation des bases de données
1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Les modèles d'API Il existe quatre variétés d'API SQL réparties selon 2 dimensions : instant de création de la requête : SQL statique ou SQL dynamique syntaxe de la requête : SQL intégré ou SQL appelé SQL statique (static SQL) : les instructions SQL sont rédigées par le programmeur au moment de la construction du programme. On peut les lire intégralement dans le code du programme ! SQL dynamique (dynamic SQL) : les instructions SQL sont construites dynamiquement, sous la forme d'une chaîne de caractères, par le programme au moment de son exécution. Elles sont invisibles dans le code du programme parce qu'elle n'existent pas encore ! SQL intégré (embedded SQL ou ESQL) : les instructions SQL font partie du programme et doivent être (pré-) compilées pour être converties en appels au SGBD. SQL appelé (call-level interface ou CLI-SQL) : les instructions SQL se présentent dans le programme sous la forme d'appels de procédures du SGBD. La variété SQL appelé est forcément aussi dynamique. II. Utilisation des bases de données
1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Les modèles d'API Disponibilité : dynamic SQL COBOL, PL/1 C (ODBC), Java (JDBC) COBOL, C, Java (SQLJ) - static SQL ESQL CLI-SQL Les API SQL de Java : SQL statique intégré: SQLJ SQL dynamique appelé: JDBC Il n'existe pas d'API SQL dynamique intégrée pour Java II. Utilisation des bases de données
Cycle de vie d'un programme ESQL statique en langage H 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Les modèles d'API Cycle de vie d'un programme ESQL statique en langage H rédaction compilation exécution écriture des requêtes SQL explicites parmi les instructions en H; 1. précompilation SQL qui transforme chaque instruc-tion SQL en : a. procédures compilées stockées dans le catalogue b. appel en H à ces procédures dans le programme 2. compilation H le programme soumet au SGBD les demandes d'exécution des procédures compilées; si le schéma a été modifié, les requêtes sont recompilées automatiquement et stockées dans le catalogue II. Utilisation des bases de données
Cycle de vie d'un programme ESQL dynamique en langage H 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Les modèles d'API Cycle de vie d'un programme ESQL dynamique en langage H on s'accroche ! rédaction compilation exécution écriture, parmi les instructions en H, des instructions qui : - fabriqueront, - compileront, - exécuteront les requêtes SQL au moment de l ’exécution; 1. précompilation SQL qui transforme chaque instruc-tion SQL en : a. procédures compilées stockées dans le ca-talogue b. appel en H à ces pro-cédures dans le pro-gramme 2. compilation H le programme : 1. fabrique les instructions SQL 2. les soumet au SGBD pour compilation (via appels aux procédures précompilées) 3. les resoumet au SGBD pour exécution (via appels aux procédures précompilées) Un même programme peut inclure des instructions ESQL statiques et dynamique II. Utilisation des bases de données
1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Les modèles d'API Cycle de vie d'un programme CLI statique pattern contradictoire : les requêtes se présentent sous forme d'arguments forcément dynamique ! Donc, il n'y a pas d'interface CLI statique II. Utilisation des bases de données
Cycle de vie d'un programme CLI dynamique 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Les modèles d'API Cycle de vie d'un programme CLI dynamique Réclame une API SQL (ODBC, JDBC, ...) rédaction compilation exécution écriture des instructions qui : - fabriqueront les requêtes SQL - les compileront (via appels à l'API SQL), - exécuteront les requêtes SQL (via appels à l'API SQL) au moment de l ’exécution; compilation H le programme : 1. fabrique les instructions SQL 2. les soumet au SGBD pour compilation (via appels à l'API SQL) 3. les soumet au SGBD pour exécution (via appels à l'API SQL) II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - SQLJ 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - SQLJ Interface ESQL statique pour Java : SQLJ String varNCLI, varNOM, varLOC; varNCLI = "C400"; #sql{select NOM, LOCALITE into :varNOM, :varLOC from CLIENT where NCLI = :varNCLI}; <traiter les valeurs de varNOM et varLOC> varCAT = "C2"; varNCLI = "C400"; #sql{update CLIENT set CAT = :varCAT where NCLI = :varNCLI}; II. Utilisation des bases de données
curseur en Java = itérateur (existe en 2 modèles très tendance) 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - SQLJ Interface ESQL statique pour Java : SQLJ curseur en Java = itérateur (existe en 2 modèles très tendance) définir le classe d'itérateurs #sql iterator IterateurClient(String NCLI, String NOM); IterateurClient F; String varLOC = "Poitiers"; #sql F = {select NCLI, NOM from CLIENT where LOCALITE = :varLOC}; while (F.next()) { varNCLI = F.NCLI(); varNOM = F.NOM(); <traiter les valeurs de varNCLI et varNOM> } F.close(); créer un itérateur F définir et ouvrir F lire prochaine ligne de F lecture réussie fermer F méthodes standard des itérateurs II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - SQLJ 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - SQLJ Traitement d'un programme Java/SQLJ rédaction compilation exécution écriture des requêtes SQLJ parmi les instructions Java; 1. précompilation SQLJ qui transforme chaque instruc-tion SQLJ en appels JDBC 2. compilation Java en bytecode le programme communique avec le SGBD via les appels JDBC II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - JDBC 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - JDBC Interface SQL CLI dynamique pour Java : JDBC Principes : lors de l'exécution du programme, une requête SQL est formée comme valeur d'une variable Java cette requête est soumise au SGBD pour être préparée (compilée) elle est ensuite exécutée II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - JDBC 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - JDBC Interface SQL CLI dynamique pour Java : JDBC Réclame l'API SQL JDBC rédaction compilation exécution écriture en Java des instruc-tions qui : - fabriqueront les requêtes SQL - les compileront (via appels à l'API JDBC), - exécuteront les requêtes SQL (via appels à l'API JDBC); compilation Java le programme : 1. charge le pilote JDBC du SGBD 3. fabrique les instructions SQL 4. les soumet au SGBD pour compilation (via appels à l'API JDBC) 5. les soumet au SGBD pour exécution (via appels à l'API JDBC) II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - JDBC 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - JDBC Interface SQL CLI dynamique pour Java : JDBC on crée une connexion avec la BD urlBD = <adresse de la BD>; login = "jlh"; motPasse = ..; conn = DriverManager.getConnection(urlBD,login,motPasse); requete = "select NOM, LOCALITE from CLIENT " + "where NCLI = ?"; inst = conn.prepareStatement(requete); varNCLI = "C400"; inst.setString(1, varNCLI); res = inst.executeQuery(); if (res.next()){ varNOM = res.getString(1); varLOC = res.getString(2); <traiter les valeurs de varNOM et varLOC> }; res.close(); on forme une requête SQL dans une variable Java on demande la compilation de la requête; résultat dans l'objet inst la requête possède 1 paramètre d'entrée on injecte une constante dans le paramètre #1 de l'instruction compilée accès à la ligne suivante on exécute l'instruction inst; résultat dans res on extrait les 2 résultats de la ligne courante on ferme res II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - JDBC 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - JDBC Interface SQL CLI dynamique pour Java : JDBC Résultat multilignes requete = "select NCLI, NOM from CLIENT " + "where LOCALITE = ?"; inst = conn.prepareStatement(requete); varLOC = "Poitiers"; inst.setString(1, varLOC); res = inst.executeQuery(); while (res.next()){ varNCLI = res.getString(1); varNOM = res.getString(2); <traiter les valeurs de varNCLI et varNOM> }; res.close(); même structure; "while" au lieu de "if" II. Utilisation des bases de données
Version compacte = compilation + exécution en une opération 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - JDBC Interface SQL CLI dynamique pour Java : JDBC Version compacte = compilation + exécution en une opération on crée une instruction vide conn = DriverManager. ... inst = conn.createStatement(); varNCLI = "C400"; requete = "select NOM, LOCALITE FROM CLIENT where NCLI = ’" + varNCLI + "’"; res = inst.executeQuery(requete); if (res.next()){ varNOM = res.getString(1); varLOC = res.getString(2); <traiter les valeurs de varNOM et varLOC> }; res.close(); on forme une requête SQL dans une variable Java; inclut la constante !!! on demande la compilation et l'exécution de la requête; résultat dans l'objet res valeur du paramètre d'entrée directement dans la requête II. Utilisation des bases de données
Opérations de modification 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - JDBC Interface SQL CLI dynamique pour Java : JDBC Opérations de modification requete = "update CLIENT set CAT = ? where NCLI = ?"; inst = con.prepareStatement(requete); varCAT = "C2"; varNCLI = "C400"; inst.setInt(1, varCAT); inst.setInt(2, varNCLI); inst.executeUpdate(); on injecte une constante dans chaque paramètre de l'instruction compilée la requête possède 2 paramètres d'entrée on exécute l'instruction II. Utilisation des bases de données
Identification de l'agent 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Sécurité Danger potentiel de l'API dynamique CLI compacte : l'injection de code SQL Albert-Durant Login : A7cfg990 Mot de passe : Identification de l'agent SYS_USERS USER_ID Anne-Mercier Albert-Durant Charles-André PW 73flmrsZZ A7cfg990 biose584h74 autres . . . Réaction de l'application : select count(*) into :N from SYS_USERS where ID_USER = 'Albert-Durant' and PW = 'A7cfg990'; II. Utilisation des bases de données
Identification de l'agent 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Sécurité L'injection de code SQL Albert-Durant Login : A7cfg990 Mot de passe : Identification de l'agent SYS_USERS USER_ID Anne-Mercier Albert-Durant Charles-André PW 73flmrsZZ A7cfg990 biose584h74 autres . . . En pratique : getForm(formID, varLogin, varPW); requete = "select count(*) from SYS_USERS " + " where ID_USER = '" + varLogin + "'" + " and PW = '" + varPW + "' "; exec SQL execute immediate from :requete into :N; if (N = 0) then accepte = False else accepte = True; saisie des 2 valeurs construction de la requête avec insertion des valeurs II. Utilisation des bases de données
Identification de l'agent 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Sécurité L'injection de code SQL : tentative de fraude X' or ’X' = ’X Login : Mot de passe : Identification de l'agent SYS_USERS USER_ID Anne-Mercier Albert-Durant Charles-André PW 73flmrsZZ A7cfg990 biose584h74 autres . . . select count(*) into :N from SYS_USERS where ID_USER = 'X' or 'X' = 'X' and PW = 'X' or 'X' = 'X'; La condition where est toujours satisfaite ! L'accès est accordé au fraudeur. II. Utilisation des bases de données
4.10 Les interfaces SQL des programmes d'application - Sécurité 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.10 Les interfaces SQL des programmes d'application - Sécurité L'injection de code SQL : prévention Eviter l'interface CLI dynamique compacte Utiliser l'interface CLI dynamique avec pré-compilation Mieux : utiliser l'interface ESQL statique Vérifier la plausibilité des valeurs saisies Vérifier la forme finale de la requête construite etc. II. Utilisation des bases de données
4.11 SQL et l'information incomplète 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.11 SQL et l'information incomplète a) Introduction b) Null & Unknown en SQL c) Les problèmes de l'information incomplète en SQL d) Recommandations Contenu II. Utilisation des bases de données
4.11 SQL et l'information incomplète - Introduction 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.11 SQL et l'information incomplète - Introduction A rédiger II. Utilisation des bases de données
4.11 SQL et l'information incomplète - Null & Unknown en SQL 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.11 SQL et l'information incomplète - Null & Unknown en SQL A rédiger II. Utilisation des bases de données
4.11 SQL et l'information incomplète - Problèmes en SQL 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.11 SQL et l'information incomplète - Problèmes en SQL A rédiger II. Utilisation des bases de données
4.11 SQL et l'information incomplète - Recommandations 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 3. Le langage SQL DML (2) 4. Le langage SQL avancé 4.9 Catalogue 4.10 Interfaces SQL / PA 4.11 Information incomplète 4.11 SQL et l'information incomplète - Recommandations A rédiger II. Utilisation des bases de données
Fin du module 4 1. Le langage SQL-DDL 2. Le langage SQL DML (1) 4. Le langage SQL avancé Fin du module 4 II. Utilisation des bases de données
II. Utilisation des bases de données