Daten – Bank 5. Vorlesung Dr. Karsten Tolle – PRG2 – SS 2013 4. Vorlesung • 1. Normalform • Funktionale Abhängigkeiten und Schlüsselkandidaten Dr. Karsten Tolle – PRG2 – SS 2013 2 vorrat (Teil Lager Menge Lageradresse) 101 1 25 Waag. 10 102 3 410 Krugerstr. 42 102 1 F = { Teil Lager → Menge Lageradresse Lager → Lageradresse 112 } 4 300 Waag. 10 10 Brunnerstr. 105 F = { Teil Lager → Menge Lageradresse Lager → Lageradresse } Dr. Karsten Tolle – PRG2 – SS 2013 3 vorrat F = { Teil Lager → Menge Lageradresse Lager → Lageradresse } (Teil Lager Menge Lageradresse) 101 1 25 Waag. 10 102 3 410 Krugerstr. 42 102 1 300 Waag. 10 112 4 10 Brunnerstr. 105 1 Probleme: Redundanz Einfüge-Anomalie Lösch-Anomalie – Lageradresse für jedes Teil im Lager redundant gespeichert – Lager ohne Teile kann nicht eingefügt werden – Lager ohne Teile würden gelöscht werden Dr. Karsten Tolle – PRG2 – SS 2013 4 vorrat (Teil Lager Menge Lageradresse) 101 1 25 Waag. 10 102 3 410 Krugerstr. 42 102 1 300 Waag. 10 112 4 10 Brunnerstr. 105 F = { Teil Lager → Menge Lageradresse Lager → Lageradresse } Fremdschlüssel Lösung: Zerlegung der Relation vorrat (Teil Lager Menge) lager (Lager Lageradresse) 101 1 25 1 Waag. 10 102 3 410 2 RMS 10 102 1 300 3 Krugerstr. 42 112 4 10 4 Brunnerstr. 105 Dr. Karsten Tolle – PRG2 – SS 2013 5 Prim Ein Attribut A heißt prim in R, wenn es in einem Schlüssel von R enthalten ist, sonst heiße es nicht prim. A ist prim ⇔ X: X ist Schlüssel, A∈X Dr. Karsten Tolle – PRG2 – SS 2013 6 volle funktionale Abhängigkeit Eine funktionale Abhängigkeit X → Y heißt volle funktionale Abhängigkeit, wenn für keine Teilmenge X´ ⊂ X, X´ → Y gilt. Y heißt dann voll funktional abhängig von X. X → Y voll funktional ⇔ ∃ X´⊂ X : X´ → Y Dr. Karsten Tolle – PRG2 – SS 2013 7 2. Normalform Ein Relationenschema R ist in 2. Normalform (2NF), wenn es in 1NF ist und jedes nicht prime Attribut voll funktional von jedem Schlüssel von R abhängig ist. 2. NF ⇔ A nicht prim ⇒ Schlüssel → A voll funktional Die 2. NF ist verletzt, wenn ein Teil eines Schlüssels ein Nicht-Schlüsselattribut funktional bestimmt. Dr. Karsten Tolle – PRG2 – SS 2013 8 Beispiel 1 vorrat (Teil Lager Menge Lageradresse) 101 1 25 Waag. 10 102 3 410 Krugerstr. 42 102 1 300 Waag. 10 112 4 10 Brunnerstr. 105 F = { Teil Lager → Menge Lageradresse Lager → Lageradresse } vorrat (Teil Lager Menge 101 1 25 1 Waag. 10 102 3 410 3 Krugerstr. 42 102 1 300 4 Brunnerstr. 105 112 4 10 Dr. Karsten Tolle – PRG2 – SS 2013 lager (Lager Lageradresse) 9 Beispiel 2 R = ABCD F = {AB→C, B→D} B→D verletzt 2. NF Zerlegung in: R1 = (ABC) mit F1 = {AB→C} R2 = (BD) mit F2 = {B→D} Dr. Karsten Tolle – PRG2 – SS 2013 10 Übung R = ABCDE F = {AB→C, B→D, D→E} B→D verletzt 2. NF Zerlegung in: R1 = (ABCE) und R2 = (BD) … dann geht D Zerlegung in: R1 = (ABC) und R2 = (BD) und R3 = (DE) E verloren! Dr. Karsten Tolle – PRG2 – SS 2013 11 Vorgehen beim Prüfen auf NF (WICHTIG!!!) Ausgangspunkt: Relation R (mind. 1. NF) und Menge der FDs gegeben. 1. Welche Schlüssel gibt es? was sind die nicht primen Attribute! 2. Prüfe auf 2. NF (voll funktional abhängig von ALLEN Schlüsseln?) Dr. Karsten Tolle – PRG2 – SS 2013 12 Fahrzeug ID Hersteller Zugel_Ges_Gew Führerschein ID HERSTELLER ZUGEL_GES_GEW FÜHRERSCHEIN 1 VW bis 3.5 B 2 MB bis 7.5 C1 3 MB bis 8.5 C 4 MAN bis 12 C 5 MB bis 12 C 6 VW bis 12 C … … … F = { ID R, ZUGEL_GES_GEW Dr. Karsten Tolle – PRG2 – SS 2013 2. NF? FÜHRERSCHEIN} 13 Trotzdem Probleme ! ID HERSTELLER ZUGEL_GES_GEW FÜHRERSCHEIN 1 VW bis 3.5 B 2 MB bis 7.5 C1 3 MB bis 8.5 C 4 MAN bis 12 C 5 MB bis 12 C 6 VW bis 12 C … … … Dr. Karsten Tolle – PRG2 – SS 2013 14 Normalisierung … ID HERSTELLER ZUGEL_GES_GEW FÜHRERSCHEIN 1 VW bis 3.5 B 2 MB bis 7.5 C1 3 MB bis 8.5 C 4 MAN bis 12 C 5 MB bis 12 C 6 VW bis 12 C … … … F = { ID R, ZUGEL_GES_GEW FÜHRERSCHEIN} ID HERSTELLER ZUGEL_GES_GEW ZUGEL_GES_GEW FÜHRERSCHEIN 1 VW bis 3.5 bis 3.5 B 2 MB bis 7.5 bis 7.5 C1 3 MB bis 8.5 bis 8.5 C 4 MAN bis 12 bis 12 C 5 MB bis 12 bis 12 C 6 VW bis 12 bis 12 C … … … … Dr. Karsten Tolle – PRG2 – SS 2013 15 Normalformen Über die Normalformen (NF) werden Kriterien definiert, um Redundanzen und Anomalien zu verhindern. Es gibt: 1 NF 2 NF 3 NF BCNF 4 NF 5 NF 6 NF 1 NF 2 NF 3 NF Dr. Karsten Tolle – PRG2 – SS 2013 … 16 Normalisierung / Denormalisierung • Normalisierung: Der Prozess des Aufspaltens von Relationen, um Anomalien/Redundanzen zu verhindern. • Denormalisierung: Der Prozess des Zusammenlegens von Relationen, um Performanz zu gewinnen. Dr. Karsten Tolle – PRG2 – SS 2013 17 seit Person AusweisNr. (u:v) lebt_in (w:x) PLZ Name Vorname Abhängig von u, v, w und x Ort PERSON Ortsname (AusweisNr., Name, Vorname) ORT (PLZ, Ortsname) PERSON ORT LEBT_IN (AusweisNr., Name, Vorname) (PLZ, Ortsname) (AusweisNr., PLZ, seit) LEBT_IN PERSON (AusweisNr., PLZ, seit) (AusweisNr., Name, Vorname) ORT (PLZ, Ortsname) PERSON (AusweisNr., Name, Vorname) LEBT_IN (AusweisNr., PLZ, seit) ORT (PLZ, Ortsname, AusweisNr., seit) PERSON (AusweisNr., Name, Vorname, PLZ, seit) ORT (PLZ, Ortsname) … (3:5) Auto KFZ-Kennzeichen Hersteller hat_Räder (0:1) Rad Fabr.-Nr. PERSON_ORT (AusweisNr., Name, Vorname, PLZ, Ortsname, seit) PERSON_ORT (AusweisNr., Name, Vorname, PLZ, Ortsname, seit) Dr. Karsten Tolle – PRG2 – SS 2013 18 Breite Generalisierung ER rel. Modell Möglichkeit 1: KONTO (Kto.Nr., Kunde, Kto.Stand) GIROKONTO (Kto.Nr., Kunde, Kto.Stand, Kreditrahmen) SPARKONTO (Kto.Nr., Kunde, Kto.Stand, Zinssatz) Kto.-Nr. Kunde Möglichkeit 2: KONTO (Kto.Nr., Kunde, Kto.Stand) GIROKONTO (Kto.Nr., Kreditrahmen) SPARKONTO (Kto.Nr., Zinssatz) Kto.Stand Konto Girokonto Kreditrahmen Sparkonto Zinssatz Möglichkeit 3: KONTO (Kto.Nr., Kunde, Kto.Stand, Kreditrahmen, Zinssatz) Dr. Karsten Tolle – PRG2 – SS 2013 19 rel. Modell ER ???? Gegeben R (A, B, C) S (D, E) T (B, D, F) U (A, G) … Was ist Entity-Typ, was Beziehungstyp? Bilden S und U zusammen ein Entity-Typ? Sind R.B und T.B überhaupt GLEICH? R und U könnten eine Generalisierung darstellen… ???? Dr. Karsten Tolle – PRG2 – SS 2013 20 Tabellen Ansicht ≠ ER-Modell Dr. Karsten Tolle – PRG2 – SS 2013 21 OO (ER) und rel. Modell • Als „Object-relational Impedance Mismatch“ (auch objekt-relationale Unverträglichkeit genannt) bezeichnet man die Unverträglichkeit zwischen dem relationalem Datenmodell und dem objektorientieren Programmierparadigma. • Unverträglichkeit bedeutet, dass die Abbildungen von dem einen ins andere Modell (und zurück) nicht eindeutig ohne Zusatzwissen möglich ist. Dr. Karsten Tolle – PRG2 – SS 2013 22 (Fast) Alle Wege führen nach Rom …. Prüfe die Anforderungen und denke an die Zukunft! Dr. Karsten Tolle – PRG2 – SS 2013 23 Prinzipien des digitalen Speicherns I Ein Datensatz sollte offensichtlich/eindeutig und schnell mit dem Objekt, welches es repräsentiert, in Verbindung gebracht werden können. ISBN TITLE 3-12-517154-7 … ISBN Number Dr. Karsten Tolle – PRG2 – SS 2013 24 Prinzipien des digitalen Speicherns II Atomisierung der Daten – teile die Daten in ihre kleinste Einheit auf 1. Normalform ISBN AUTHORS 0-13-221211-0 Jeffrey Hoffer, Mary Prescott and Fred McFadden TITLE … … ISBN TITLE 0-13-221211-0 … Dr. Karsten Tolle – PRG2 – SS 2013 … ISBN AUTHORS 0-13-221211-0 Jeffrey Hoffer 0-13-221211-0 Mary Prescott 0-13-221211-0 Fred McFadden 25 Prinzipien des digitalen Speicherns III … ein weiteres Beispiel (aus der Realität). … RULER … … Hadrian (Sabina) … Bedeutet: Hadrian war der Prägeherr und prägte die Münze für (zu ehren von) Sabina. … RULER COINED_FOR Hadrian Sabina … … Dr. Karsten Tolle – PRG2 – SS 2013 26 Prinzipien des digitalen Speicherns IV Handhabung unsicherer Informationen: … RULER … … Hadrian? … ?Nero Nero Bedeutung: … nicht wirklich sicher / abgeleitet aus anderen Informationen. … … Dr. Karsten Tolle – PRG2 – SS 2013 RULER QUALIFICATION Hadrian uncertain Nero inferred Nero certain … 27 Prinzipien des digitalen Speicherns V Konsistenz in der Namensgebung für Tabellen und Attribute. coinlist metal_information ID … CODE … besser coin_list metal_information ID … Dr. Karsten Tolle – PRG2 – SS 2013 ID … 28 Prinzipien des digitalen Speicherns VI Ausnutzung der referenziellen Integrität wo immer möglich! Dr. Karsten Tolle – PRG2 – SS 2013 29 Sicherheit Jahr für Jahr kosten Datenpannen Firmen mehr Geld. Quelle: Symantec Nutzung von Views Mitarbeiter Empno Vorname Nachname Gehalt 1 Ines Müller 75000 2 Fred Wagner 60000 3 Ingo Meyer 72000 4 Max Müller 26000 Jemand der die Vor- und Nachnamen der Mitarbeiter benötigt, würde z.B. die SelectRechte an der Tabelle „Mitarbeiter“ erhalten und so auch die Gehälter erfahren Dr. Karsten Tolle – PRG2 – SS 2013 31 Nutzung von Views Mitarbeiter Empno Vorname Nachname Gehalt 1 Ines Müller 75000 2 Fred Wagner 60000 3 Ingo Meyer 72000 4 Max Müller 26000 CREATE VIEW Mitarbeiter_Namen AS select Vorname, Nachname from Mitarbeiter; Vorname Nachname Ines Müller Fred Wagner Ingo Meyer Max Müller Dr. Karsten Tolle – PRG2 – SS 2013 32 Mitarbeiter Abteilung Empno Vorname Nachname Gehalt Depno Name Head 1 Ines Müller 75000 1 Finanzen 2 2 Fred Wagner 60000 2 Einkauf 1 3 Ingo Meyer 72000 3 HR 1 4 Max Müller 26000 CREATE VIEW Mitarbeiter_Dept AS select m.Empno, m.Nachname, d.Name as Abt from Mitarbeiter m, Abteilung d, Arbeitet_in a where m.Empno = a.Empno and a.Depno = d.Depno; … Arbeitet_in Empno Depno 1 2 1 3 2 1 3 3 4 2 … Mitarbeiter_Dept Empno Nachname Abt 1 Müller Einkauf 1 Müller HR 2 Wagner Finanzen 3 Meyer HR 4 – SS 2013 Müller Dr. Karsten Tolle – PRG2 Mitarbeiter_Dept Einkauf 33 Datenlecks zum Stöbern … • http://www.projekt-datenschutz.de/ • http://opalkatze.wordpress.com/to-becontinue/datenpannen/datenpannen-2013/ • http://www.datenleck.net/ Dr. Karsten Tolle – PRG2 – SS 2013 34 Benutzer und Rechte • CREATE USER test IDENTIFIED BY PASSWORD ‘li720lhjLJ2' – erzeugt einen neuen Benutzer • GRANT select ON star_trek.* TO test – weist dem Benutzer test die select Rechte für alle Tabellen der DB star_trek zu • REVOKE select ON star_trek.* from test – nimmt ihm die Rechte wieder Siehe auch: http://dev.mysql.com/doc/refman/5.1/de/grant.html Dr. Karsten Tolle – PRG2 – SS 2013 35 Grant und Revoke unter Workbench Dr. Karsten Tolle – PRG2 – SS 2013 36 Absichern am Bsp. MySQL • keine Standard Benutzer – z.B. „root“ mysql> RENAME USER root TO new_user; • „show databases“ nicht unterstützen • Netzwerkzugang nur erlauben, wenn nötig • Firewall installieren • … Siehe auch: http://dev.mysql.com/doc/refman/5.6/en/general-security-issues.html Dr. Karsten Tolle – PRG2 – SS 2013 37 SQL Injection … (böswilliges) Einschleusen oder Verändern von SQL-Befehlen an die Datenbank durch den Benutzer. Web Related Vulnerabilities 2011 (commercial applications) Dr. Karsten TolleTrends – PRG2Report – SS 2013 Application Security – März 2012 - CENZIC 39 Mögliche Gefahren Zusätzliche Bedingungen einzufügen: Eingabe: 1 or id > 1 or name like ‘%‘ select * from mytable where id = 1 or id > 1 or name like ‘%‘?? Daten der Tabelle können ausgespäht werden. Dr. Karsten Tolle – PRG2 – SS 2013 40 Mögliche Gefahren Zusätzliche Statements einzufügen: Eingabe: 1; drop mytable # select * from mytable where id = 1; drop mytable # ?? Direkter Schaden an der Datenbank, eventuell Ausfall der Applikation. Dr. Karsten Tolle – PRG2 – SS 2013 41 Was möglich ist hängt ab von … • DBMS – Erlaubt es mehrere SQL-Statements gleichzeitig auszuführen? – Welche Zeichen werden als Kommentare interpretiert? (z.B.: -- oder #) • Verbindungsart / Programmiersprache – JDBC, ODBC, … ??? Dr. Karsten Tolle – PRG2 – SS 2013 42 Gegenmaßnahmen • DB-Verbindung nur mit den Rechten, die nötig sind aufbauen! (siehe GRANT und REVOKE) • Nutzung von Prepared Statements (in Java) • Nutzung von statischem SQL, z.B. SQLJ • Möglichst wenig Informationen über die Datenbank nach außen geben! … z.B. bei Fehlermeldungen • Eingaben auf Sonderzeichen und ungültige Werte prüfen (möglichst zurückweisen!) • Anwendung diesbezüglich testen (testen lassen) Dr. Karsten Tolle – PRG2 – SS 2013 43 Gegenmaßnahmen PHP • Positivlisten Methode – wurde eingegeben was man erwartet? • Negativlisten Methode – Ablehnung von Schlüsselwörtern • Gegebene Funktion in PHP: mysql_real_escape_string() Sie Maskiert alle Zeichen mit denen man aus den Anführungszeichen ausbrechen kann. • Kombination aller 3 ist die sicherste Variante. Siehe auch: – http://www.inside-php.de/tutorial/PHP-Sicherheit-13/SQL-Injections-vermeiden.html – http://php.net/manual/en/security.database.sql-injection.php Dr. Karsten Tolle – PRG2 – SS 2013 44 Literaturhinweise • Handling Java Web Application Input, Part 1 von Stephen Enright – http://today.java.net/pub/a/today/2005/09/08/handling-java-web-app-input.html • Advanced SQL Injection In SQL Server Applications von Chris Anley – http://www.cgisecurity.com/lib/advanced_sql_injection.pdf – (more) http://www.encription.co.uk/downloads/more_advanced_sql_injection.pdf Dr. Karsten Tolle – PRG2 – SS 2013 45