1a) SQL Stored Procedure via IDs

Ähnliche Dokumente
Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Java: MySQL-Anbindung mit JDBC.

Willkommen. Datenbanken und Anbindung

Multimedia im Netz Wintersemester 2013/14. Übung 02 (Hauptfach)

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Universität Augsburg, Institut für Informatik WS 2014/2015 Prof. Dr. W. Kießling 05. Dez F. Wenzel, L. Rudenko Lösungsblatt 7

Datenbanksysteme I. Aufgabe 1: Erstellen einer Multimedia-Datenbank. Grundlage sind wiederum bereits implementierte Methoden aus Übungsblatt 6:

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8

MySQL, Java und einiges mehr

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7

Datenbanksysteme 2011

Universität Augsburg, Institut für Informatik WS 2011/2012 Prof. Dr. W. Kießling 09. Dez Dr. M. Endres, Dr. S. Mandl, F. Wenzel Lösungsblatt 6

Ablauf Unit2. Walkthrough

Java Database Connectivity-API (JDBC)

MySQL, phpmyadmin & SQL. Kurzübersicht

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

Java Database Connectivity-API (JDBC)

Ablauf. Wichtige Termine. Vertiefendes Übungsprojekt - SQL II

Webbasierte Informationssysteme

Oracle & Java HOW TO

Probeklausur Datenbanktechnologie

Mehr Performance mit JDBC JAVA-Anwendungen und die Oracle-Datenbank. Carsten Czarski Business Unit Database Oracle Deutschland GmbH

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

Abbildung 6-8: Abfolge beim doppelten Abschicken von Formularen

Klausur Datenbanken II

Oracle: Abstrakte Datentypen:

"Die HTML-PHP-Schnittstelle -- Ein- und Ausgabe der Daten"

Praktische SQL-Befehle 2

Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 11. Dez Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 7

Übung Datenbanksysteme I Embedded SQL, Stored Procedures, JDBC

Übungen. DI (FH) Levent Öztürk

Multimedia im Netz Wintersemester 2013/14. Übung 10 (Nebenfach)

Play Framework, MySQL, JPA, HQL, HTML, jquery,

Übung Datenbanksysteme I JDBC. Thorsten Papenbrock

PHP- Umgang mit Datenbanken (1)

Übung Datenbanksysteme I JDBC. Thorsten Papenbrock

Entwicklung einer Webseite zur Verwaltung von Prüfungsterminen

Entwicklung einer Webseite zur Verwaltung von Prüfungsterminen

Die Datenbank und der Strukturentwurf wurden vorher mit phpmyadmin erzeugt.

Java Database Connectivity-API (JDBC)

vs. Fehler zur Übersetzungszeit

Datenbank Anbindung. Arthur Zaczek

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Einbettung in SQL. Zwei Prinzipien: (1) Statische Einbettung

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Konzeption und Implementierung eines Datenbank-Agenten für die Bereitstellung von Daten aus dem Verkehr

Webtechnologien. Teil 8: PDO/MySQL

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

PROGRAMMIERPROJEKT 2016 VERWENDETE TECHNOLOGIEN

Wie kommen die Befehle zum DBMS

Einführung in JDBC. IFIS Universität zu Lübeck

PHP-5-Zertifizierung. Block 12 Security.

Verteidigung gegen SQL Injection Attacks

Kapitel 11: Anwendungsentwicklung

AG Datenbanken und Informationssysteme Wintersemester 2006 / 2007

7. Übungsblatt. Für die Übung am Donnerstag, 14. Dezember 2006, von 15:30 bis 17:00 Uhr in 13/222.

Persistenz unter Kontrolle mit JDBI für Java

Kapitel DB:VI (Fortsetzung)

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Client/Server-Programmierung

Sicherheit von Webapplikationen Sichere Web-Anwendungen

PHP MySQL - myphpadmin Formulardaten in eine Datenbank speichern

2. Web-Anbindung von Datenbanken

Ho Ngoc Duc IFIS - Universität zu Lübeck

Grundlagen der Informatik 2

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

Übungsblatt 8- Lösungsvorschlag

PROG O RAMMIE MMI RPROJ O EKT K

Datenbanksysteme 2009

5.8 Bibliotheken für PostgreSQL

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Kapitel 11: Anwendungsentwicklung

Datenbanksysteme 2015

DOAG 2016 Oracle APEX Security

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren

Client/Server-Programmierung

Praktikum Datenbanksysteme

PostgreSQL auf Debian System

Interaktive Webseiten mit PHP und MySQL

Softwaretechnik 2015/2016

12. Programmierung in der Datenbank

Internet-Technologien

Datenbankzugriff mit JDBC

Präsentation mongodb. David Wild

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - WS Metadaten. Andreas Schmidt Metadaten 1/17

PHP Schulung Beginner. Newthinking Store GmbH Manuel Blechschmidt

Entwicklungsumgebung für die Laborübung

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Transkript:

1a) SQL Stored Procedure via IDs Erstellen Sie analog zu Aufgabe 2d) des ersten Übungsblatts eine SQL Stored Procedure, welche den Freundschaftsgrad zweier Benutzer eines sozialen Netzwerks aktualisiert.dazu sollen die Parameter uid1, uid2 und Fgrad übergeben werden DELIMITER // CREATE PROCEDURE updatefgrad (IN p_uid1 INT, IN p_uid2 INT, IN p_fgrad varchar(100))language SQL BEGIN END; // UPDATE Freundschaft SET Fgrad= p_fgrad WHERE (uid1= p_uid1 AND uid2= p_uid2) OR (uid1= p_uid2 AND uid2= p_uid1); DELIMITER ;

1b) SQL Stored Procedure via Name Erweitern Sie die obige Lösung derart, dass anstelle der Nutzer-IDs die Benutzernamen (name1, name2) als Eingabeparameter dienen, d.h. die Nutzer-IDs müssen auf Basis der Namen ermittelt werden. Nehmen Sie an, dass Nutzer eindeutig durch ihren Benutzernamen gekennzeichnet werden. DELIMITER // CREATE PROCEDURE updatefgradvianame (IN name1 VARCHAR(100), IN name2 VARCHAR(100), IN Fgrad VARCHAR(100)) LANGUAGE SQL BEGIN END;// DELIMITER ; DECLARE id1 INT; DECLARE id2 INT; SELECT uid INTO id1 FROM Nutzer WHERE name= name1; SELECT uid INTO id2 From Nutzer WHERE name = name2; CALL updatefgrad(id1, id2, Fgrad);

1c) Stored Procedure aufrufen JDBC Skizzieren Sie den Aufruf dieser Stored Procedure aus einem Java-Programm mittels JDBC. public void doit(connection con, String name1, String name2, String Fgrad) { }; CallableStatement cs = con.preparecall( "CALL updatefgradvianame(?,?,?)" ); cs.setstring(1, name1); cs.setstring(2, name2); cs.setstring(3, Fgrad); cs.execute(); cs.close();

2a) SQL-Injection Es sei folgendes Szenario zum Thema Soziales Netzwerk gegeben. Eine Webapplikation bietet Ihnen die Möglichkeit unter Eingabe der uid oder des Namens die Daten eines Benutzers zu ermitteln. Die notwendigen Parameter werden mittels Http- GET Request übermittelt. a) Welche Anfragen sind bzgl. SQL- Injections kritisch zu bewerten, wenn Sie den Parameter durch das Ersetzen eines Patterns, z.b. $$$, an die Anfrage binden. Begründen Sie Ihre Antwort und definieren Sie ein mögliches Angriffsszenario. i. Parameter: uid=7 SELECT n.uid, n.name FROM Nutzer n WHERE n.uid=$$$ Lösung Tabellenbezogene Datenidentifikation SELECT n.uid, n.name FROM Nutzer n WHERE n.uid=20 or 1=1 Datenbankmanipulation Wenn Wirtssprache mehrere Anfragen in einem Statement erlaubt SELECT n.uid, n.name FROM Nutzer n WHERE n.uid=20; DROP Table ; DELETE FROM Nutzer where ; Datenbanksysteme 2 4

ii. 2a-b) SQL-Injection Parameter: Name=Hans SELECT n.uid, n.name FROM Nutzer n WHERE n.name= $$$ Lösung SELECT n.uid, n.name FROM Nutzer n WHERE n.name= or = b) Wie können Sie das Problem generell vermeiden, wenn Ihre Middleware in Java implementiert ist? Lösung PreparedStatements Senden des Statements an DBS Transformation in SQL Anfrage mit Platzhaltern und Speichern im Cache PreparedStatement pstmt = con.preparestatement(select n.uid, n.name from Nutzer n where n.name=?); Binden der Parmeter an Platzhalter pstmt.setint(1,7); oder pstmt.setstring (1, hans ) Ausführung & Senden der Parameter ResultSet rs = pstmt.executequery(); Datenbanksysteme 2 5

3a) HTML-Formular Skizzieren Sie das Code-Skelett eines HTML-Formulares welches die Eingabe einer Nutzer- ID ermöglicht. Nach dem Abschicken des Formulars soll serverseitig das PHP-Skript listfriends.php ausgeführt werden. <html> <head> <title>html Example</title> </head> <body> <form method= post action= listfriends.php > <input type= text name= uid maxlength= 30 /> <input type= submit name= Mache Los! /> </form> </body> </html>

<html> <head> 3b) Freundschaftsbeziehungen auflisten <title>php Example</title> </head> <body> <?php $username = "root"; $pw = "****"; $host = "localhost"; $dbname = "stud_employee"; // Datenbankverbindung herstellen $con = new PDO("mysql:host=$host;dbname=".$dbName, $username, $pw) or DIE ("<p><verbindungsfehler!</p></body></html>"); // Fehlerbehandlung setzen (bei Datenbankfehlern abbrechen) $con->setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION);?> //SQL Statement $sql= SELECT n1.name AS name1, n2.name AS name2, f.fgrad ; $sql.= FROM Freundschaft AS f, Nutzer AS n1, Nutzer AS n2 ; $sql.= WHERE (f.uid1=? OR f.uid2=?) AND n1.uid= f.uid1 AND n2.uid= f.uid2 ;

3b) Freundschaftsbeziehungen auflisten (Forts.) <table> <tr><th>nutzer 1</th><th>Nutzer 2</th><th>Freundschaftsgrad</th></tr> <?php $stmt = $con->prepare($sql); $stmt->execute(array($_post[ uid ], $_POST[ uid ])); $result= $stmt->fetchall(pdo::fetch_assoc);?> if(!empty($result)) { } foreach($result as $row) { } </table> </body> </html> echo <tr> ; echo <td>.$row[ name1 ]. </td> ; echo <td>.$row[ name2 ]. </td> ; echo <td>.$row[ Fgrad ]. </td> ; echo </tr> ;

4a) Prepared Statements in JDBC / PDO Update: Connection con = DriverManager.getConnection(url, user, pw); String sql= "UPDATE Buch SET verlagsid =? WHERE verlagsid =?; PreparedStatement ps = con.preparestatement(sql); ps.setint(1, verlagsidneu); ps.setint(2, verlagsidalt); ps.executeupdate(); con.commit(); $con = new PDO($url, $username, $pw) $sql = "UPDATE Buch SET verlagsid =? WHERE verlagsid =?"; $stmt = $con->prepare($sql); $stmt->execute(array($verlagsidneu, $verlagsidalt)); $stmt->commit();

4a) Prepared Statements in JDBC / PDO Select: Connection con = DriverManager.getConnection(url, user, pw); String sql= "SELECT title FROM Buch WHERE verlagsid =?"; PreparedStatement ps = con.preparestatement(sql); ps.setint(1, verlagsid); ResultSet rs= ps.executequery(); while(rs.next()) { System.out.println("Name: "+rs.getstring(1)); } $con = new PDO($url, $username, $pw) $sql = "SELECT title FROM Buch WHERE verlagsid =?"; $stmt = $con->prepare($sql); $stmt->execute(array($verlagid)); $result= $stmt->fetchall(); foreach($result as $row) { echo("name: ".$row["title"]."\n"); }

4b) Mysqli vs. PDO DB-spezifische Module MySQL, Postgres, DB2, Funktionen / API abgestimmt auf Funktionalität d. DBS (z.b. Autoincrement vs. Sequences) Bibliotheken für DBS-unabhängigen Zugriff Beispiele: PDO, PEAR::DB,... Einheitliche Schnittstelle für unterschiedliche DBS Vorteil: DBS kann ausgetauscht werden, ohne Code anzupassen