Universität Mannheim Lehrstuhl für Praktische Informatik III Norman May D7 27, Raum 410 68131 Mannheim Telefon: (0621) 181-2586 Email: [email protected] Datenbanksysteme I, SS 2004 Lösungen zum 13. Übungsblatt 1. Sicherheitsaspekte Gegeben sei folgendes Fragment eines Java-Programms, daß eine parametrisierte Anfrage mittels JDBC auswertet. Der Parameter der Anfrage wird als Argument der Funktion übergeben. Die resultierende SELECT-Anweisung soll einzelne Namen von Professoren ausgeben, die eine bestimmte PID haben. ResultSet auswerten(String db, String login, String passwd, String param) { /* ... lade den JDBC Treiber ... */ ResultSet ausgabe = null; if (SQLAnweisung != null) { try { /* Auswahl der Datenbank, Identifikation und Authentisierung */ Connection con = DriverManager.getConnection(db, login, passwd); String SQLAnweisung = "SELECT Name FROM Professoren WHERE PID=’" + param + "’"; Statement s = null; try { s = con.createStatement(); ausgabe = s.executeQuery(SQLAnweisung); } catch (Exception e) { throw e; } finally { s.close(); con.close(); } } catch (Exception e) { e.printStackTrace(); } } return ausgabe; } (a) Geben Sie Beispiele an, wie das Ergebnis der Anfrage manipuliert werden kann, wenn der Parameter der Anfrage derart ungeprüft in die Anweisung eingebaut wird. 1 (b) Wie können diese Probleme verhindert oder gelöst werden? (c) Welche Sicherheitsprobleme müssen zusätzlich beachtet werden? Lösungsvorschlag (a) Inferenz: Da beliebige SQL-Anweisungen Eingegeben werden können, kann auf Daten geschlossen werden, die nicht direkt lesbar sind. Beispiel: ANY (SELECT PID FROM Professoren WHERE Gehalt > 100000). Datenverlust und unberechtigter Zugriff: durch SQL Injection: Argumente wie foo’ AND DELETE * FROM Professoren führen zu Datenverlust. Parameter wie ’ OR TRUE liefern u.U. mehr Daten als erwünscht. (b) • Verwende ein PreparedStatement statt eines Statement, weil der Treiber durch Escape-Zeichen solche manipulierten SQL-Anweisungen vermeidet. Wenn der Treiber compilierte Statements unterstützt, werden Parameter nicht übersetzt, so daß updates wirkungslos bleiben. • Parameter und SQL-Anweisungen validieren, z.B. nach ’, ; , --, select, insert, delete suchen. • Benutzerrechte einschränken, nur Lesezugriff. • Länge von Benutzereingaben limitieren. • Achtung bei Fehlermeldungen (z.B. ”keine Berechtigung für Attribut Student.geheimerBonus”) (c) Aggregation: Bei Views mit aggregierten Daten können Selektionsparameter so variiert werden, daß möglicherweise auf sensitive Einzeldaten geschlossen werden kann. Organisatorische Probleme: Datenzugriff durch nicht autorisierte Benutzer oder auf nicht vorgesehen Wegen, Umgehung der Zugriffskontrolle, Die organisatorischen Probleme lassen sich nur teilweise technisch lösen. Stattdessen sind organisatorische Maßnahmen notwendig, um diese Probleme zu beseitigen. 2. Anfragebearbeitung in VDBMS Eine Versandfirma möchte ihre Lieferauftrage über eine verteilte relationale Datenbank abwickeln. Das Schema der Datenbank enthält unter anderem folgende Relation: • Auftrag(AuftragsNr, Artikel, Menge, Preis, Steuer, Lieferadresse, Liefermodus) Eine Abteilung der Firma kümmert sich um die Annahme von Aufträgen. Die häufigsten Anfragen aus dieser Abteilung beziehen sich auf die Attribute Artikel, Menge, Preis und Steuer. Eine andere Abteilung macht die Bestellungen versandfertig und interessiert sich hauptsächlich fur die Attribute Artikel, Menge, Lieferadresse und Liefermodus. (a) Welche Fragmentierung ist hier sinnvoll (horizontal oder vertikal)? (b) Zerlegen Sie die Relation in geeignete Fragmente. Geben Sie das Schema jedes Fragments an. (c) In der Lagerabteilung wird folgende Anfrage auf dem verteilten Datenbanksystem gestartet: SELECT Artikel, Menge, Preis FROM Auftrag WHERE Lieferadresse = ’Meier, Mannheim’; i. Welche Transparenz liegt hier vor? ii. Geben Sie einen kanonischen Operatorbaum für die Anfrage an. iii. Optimieren Sie diesen Baum nach den in der Vorlesung vorgestellten Regeln. Lösungsvorschlag 2 (a) vertikal (b) Annahme(AuftragsNr, Artikel, Menge, Preis, Steuer) Versand(AuftragsNr, Artikel, Menge, Lieferadresse, Liefermodus) (c) i. Fragmentierungstransparenz ii. Πa.Artikel,a.M enge,a.P reis σv.Lief eradresse=0 M eier,M annheim0 ∧a.Auf tragsN r=v.Auf tragsN r × Annahme a iii. Versand v Πa.Artikel,a.M enge,a.P reis a.Auf tragsN r=v.Auf tragsN r Annahme a σv.Lief eradresse=0 M eier,M annheim0 ∧ Versand v 3. Synchronisation von replizierten Daten Zeigen Sie, daß die write-all/read-any Methode zur Synchronisation bei replizierten Daten einen Spezialfall der Quorum-Consensus-Methode darstellt: Wie werden Stimmen zugeordnet, um write-all/read-any zu simulieren? Wie müssen dann die Quoren Qw und Qr vergeben werden? Lösungsvorschlag Wenn wi = X gewählt wird, dann muß Qr = X und Qw = X · |S| sein, wobei |S| die Anzahl der Stationen ist. Insbesondere kann X = 1 gewählt werden. 3