Daten – Bank 5. Vorlesung 4. VL … von Person AusweisNr. (0,n) Name Vorname lebt_in bis (0,n) Ort PLZ Ortsname SQL: • create • insert • select Dr. Karsten Tolle – PRG2 – SS 2016 • 1. Normalform • Schlüssel und Funktionale Abhängigkeiten 2 Heute … von Person AusweisNr. (0,n) Name Vorname lebt_in bis (0,n) Ort PLZ Ortsname SQL: • create • insert • select Dr. Karsten Tolle – PRG2 – SS 2016 • 1. Normalform • Schlüssel und Funktionale Abhängigkeiten • 2. Normalform Sicherheit 3 Fahrzeuge der Firma AB HERSTELLER KENNZEICHEN ZUGEL_GES_GEW FÜHRERSCHEIN VW F-AB 123 3.5 B MB F-AB 234 7.5 C1 MB F-AB 235 7.5 C1 MAN F-AB 236 12 C MB F-AB 239 12 C MB F-AB 230 17 C … … … … … aus ZUGEL_GES_GEW folgt hier FÜHRERSCHEIN: ZUGEL_GES_GEW FÜHRERSCHEIN … umgekehrt nicht! bis 17 Tonnen Dr. Karsten Tolle – PRG2 – SS 2016 4 Fahrzeuge der Firma AB HERSTELLER KENNZEICHEN ZUGEL_GES_GEW VW F-AB 123 3.5 MB F-AB 234 7.5 MB F-AB 235 7.5 MAN F-AB 236 12 MB F-AB 239 12 MB F-AB 230 17 … … … Dr. Karsten Tolle – PRG2 – SS 2016 Fremdschlüssel ZUGEL_GES_GEW FÜHRERSCHEIN 3.5 B 7.5 C1 12 C 17 C … … 5 vorrat (Teil Lager Menge Strasse Hausnr) 101 1 25 Waag. 10 102 3 410 Krugerstr. 42 Waag. 10 Brunnerstr. 105 102 1 300 F = { Teil Lager Menge Lageradresse Lager Lageradresse }4 112 10 F = { Teil Lager Menge Strasse Hausnr Lager Strasse Hausnr } Dr. Karsten Tolle – PRG2 – SS 2016 6 vorrat F = { Teil Lager Menge Strasse Hausnr Lager Strasse Hausnr } (Teil Lager Menge Strasse Hausnr) 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 2016 7 vorrat (Teil Lager Menge Strasse Hausnr) 101 1 25 Waag. 10 102 3 410 Krugerstr. 42 102 1 300 Waag. 10 112 4 10 Brunnerstr. 105 F = { Teil Lager Menge Strasse Hausnr Lager Strasse Hausnr } Lösung: Zerlegung der Relation vorrat (Teil Lager Menge) Fremdschlüssel lager (Lager Strasse Hausnr) 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 2016 8 Prim Ein Attribut A heißt prim in R, wenn es in einem der Schlüsselkandidaten von R enthalten ist, sonst heiße es nicht prim. A ist prim X: X ist Schlüssel, AX Dr. Karsten Tolle – PRG2 – SS 2016 9 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 2016 10 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 2016 11 vorrat nicht 2. NF (Teil Lager Menge Strasse Hausnr) 101 1 25 Waag. 10 102 3 410 Krugerstr. 42 102 1 300 Waag. 10 112 4 10 Brunnerstr. 105 F = { Teil Lager Menge Strasse Hausnr Lager Strasse Hausnr } 2. NF vorrat (Teil Lager Menge) lager (Lager Strasse Hausnr) 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 2016 12 Beispiel 2 R = ABCD F = {ABC, BD} BD verletzt 2. NF Zerlegung in: R1 = (ABC) mit F1 = {ABC} R2 = (BD) mit F2 = {BD} … nicht immer ist eine Zerlegung so einfach! Dr. Karsten Tolle – PRG2 – SS 2016 13 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 2016 14 Fahrzeug Kennzeichen Zugel_Ges_Gew Führerschein KENNZEICHEN ZUGEL_GES_GEW FÜHRERSCHEIN F-AB 123 3.5 B F-AB 234 7.5 C1 F-AB 235 7.5 C1 F-AB 236 12 C F-AB 239 12 C F-AB 230 17 C … … … 2. NF? F = { Kennzeichen R, ZUGEL_GES_GEW FÜHRERSCHEIN} Dr. Karsten Tolle – PRG2 – SS 2016 15 Trotzdem Probleme ! KENNZEICHEN ZUGEL_GES_GEW FÜHRERSCHEIN F-AB 123 3.5 B F-AB 234 7.5 C1 F-AB 235 7.5 C1 F-AB 236 12 C F-AB 239 12 C F-AB 230 17 C … … … Dr. Karsten Tolle – PRG2 – SS 2016 16 Fahrzeuge der Firma AB HERSTELLER KENNZEICHEN ZUGEL_GES_GEW VW F-AB 123 3.5 MB F-AB 234 7.5 MB F-AB 235 7.5 MAN F-AB 236 12 MB F-AB 239 12 MB F-AB 230 17 … … … Dr. Karsten Tolle – PRG2 – SS 2016 Fremdschlüssel ZUGEL_GES_GEW FÜHRERSCHEIN 3.5 B 7.5 C1 12 C 17 C … … 17 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 2016 … 18 Auswirkungen!? Evt. Erweitert um Beziehungsattribute (0,1) oder (1,1) oder sogar Attribute anderer Entitäten (bei 1-to-1 Bez.). Attribute 1-n Mapping ER rel. Model A1 A2 … An Bi Ci Entität_1 Normalisierung Dr. Karsten Tolle – PRG2 – SS 2016 19 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 2016 20 http://www.projekt-datenschutz.de/ Datenlecks zum Stöbern … • http://www.datenleck.net/ • http://opalkatze.wordpress.com/to-becontinue/datenpannen/ (Listen für 2009 – 2013) • http://www.faz.net/aktuell/wirtschaft/netzwirtsc haft/chronik-die-wichtigsten-hackerangriffe13345391.html (2009 - 2014) Dr. Karsten Tolle – PRG2 – SS 2016 22 http://www.heise.de/newsticker/meldung/Bundestag-verabschiedet-IT-Sicherheitsgesetz-2689526.html Gesetz zum Nachlesen: http://www.bmi.bund.de/SharedDocs/Downloads/DE/Gesetzestexte/it-sicherheitsgesetz.html Dr. Karsten Tolle – PRG2 – SS 2016 23 Sicherheit • 3-Schicht Architektur Bild vom BSI IT-Grundschutz-Katalog: https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKataloge/Inhalt/_content/baust/b05/b05007.html Dr. Karsten Tolle – PRG2 – SS 2016 24 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 • GRANT select ON star_trek.offizier TO test – weist dem Benutzer test die select Rechte für die Tabelle offizier zu Siehe auch: http://dev.mysql.com/doc/refman/5.7/en/account-management-sql.html Dr. Karsten Tolle – PRG2 – SS 2016 25 Grant und Revoke unter Workbench Dr. Karsten Tolle – PRG2 – SS 2016 26 Server Variablen wie bind-address bind-address = 127.0.0.1 // erlaubt nur Verbindungen von Localhost Windows (my.ini): C:\ProgramData\MySQL\MySQL Server 5.x Linux (my.cnf): /etc/my.cnf or mysql-data-dir/my.cnf Dr. Karsten Tolle – PRG2 – SS 2016 27 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 2016 28 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 2016 29 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 2016 Müller Dr. Karsten Tolle – PRG2 Mitarbeiter_Dept Einkauf 30 Absichern am Bsp. MySQL • keine Standard Benutzer – z.B. „root“ mysql> RENAME USER root TO new_user; • Netzwerkzugang nur erlauben, wenn nötig (siehe Folien 27, 28) • Firewall installieren • show databases verbieten (my.ini): skip_show_database=on # Global nicht dyn • … Siehe auch: http://dev.mysql.com/doc/refman/5.7/en/general-security-issues.html Dr. Karsten Tolle – PRG2 – SS 2016 31 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 2016 Application Security – März 2012 - CENZIC 33 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 2016 34 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 2016 35 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 2016 36 Gegenmaßnahmen • 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. • Anwendung diesbezüglich testen (und testen lassen!) Siehe auch (für PHP): – http://php.net/manual/en/security.database.sql-injection.php Dr. Karsten Tolle – PRG2 – SS 2016 37 Sicherheit Auf DBMS-Ebene • Benutzer entsprechend anlegen • Bereitstellung von Views • Überwachung • … Auf Programmier-Ebene • Wenig Infos nach Außen • Mittel der verwendeten Prog. Sprache verwenden (z.B. PreparedStatement in Java oder EscapeFunktionen in PHP) • Entsprechende Tests vorsehen • … Literaturhinweise • 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 • BSI zu Datenbanken – https://www.bsi.bund.de/DE/Themen/ITGrundschutz/ITGrundschutzKataloge/Inhalt/_content/baust/b05/b05007.html • MySQL Manual zu Security – http://dev.mysql.com/doc/refman/5.7/en/general-security-issues.html • Advanced SQL Injection in MySQL (deutsch) – http://www.alirecaiyekta.com/uploads/Advanced-SQL-Injection-in-MySQL-GERMAN.pdf Dr. Karsten Tolle – PRG2 – SS 2016 39