2. NF

Werbung
Daten – Bank
5. Vorlesung
Dr. Karsten Tolle – PRG2 – SS 2014
Klausur
Bemerkungen:
• Man benötigt keine Übungspunkte um bei der
Klausur teilnehmen zu dürfen!
• Die Online-Anmeldung auf der PRG2-Seite
reicht nicht bei allen aus!
Dr. Karsten Tolle – PRG2 – SS 2014
2
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 2014
• 1. Normalform
• Schlüssel und Funktionale
Abhängigkeiten
3
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 2014
• 1. Normalform
• Schlüssel und Funktionale
Abhängigkeiten
• 2. Normalform
Sicherheit
4
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 2014
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 2014
6
vorrat
F = { Teil Lager → Menge Strasse Hausnr
Lager → Strasse Hausnr }
1
(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
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 2014
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 2014
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, A∈X
Dr. Karsten Tolle – PRG2 – SS 2014
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 2014
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 2014
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 2014
12
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 2014
13
Ü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 2014
14
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 2014
15
Fahrzeug
ID
Hersteller
Zugel_Ges_Gew
Führerschein
ID
HERSTELLER
ZUGEL_GES_GEW
FÜHRERSCHEIN
1
VW
3.5
B
2
MB
7.5
C1
3
MB
8.5
C
4
MAN
12
C
5
MB
12
C
6
VW
12
C
…
…
…
F = { ID R,
ZUGEL_GES_GEW
Dr. Karsten Tolle – PRG2 – SS 2014
2. NF?
FÜHRERSCHEIN}
16
Trotzdem Probleme !
ID
HERSTELLER
ZUGEL_GES_GEW
FÜHRERSCHEIN
1
VW
3.5
B
2
MB
7.5
C1
3
MB
8.5
C
4
MAN
12
C
5
MB
12
C
6
VW
12
C
…
…
…
Dr. Karsten Tolle – PRG2 – SS 2014
17
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 2014
18
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 2014
…
19
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 2014
20
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 2014
21
Tabellen Ansicht ≠ ER-Modell
Dr. Karsten Tolle – PRG2 – SS 2014
22
Sicherheit
Jahr für Jahr kosten Datenpannen Firmen mehr Geld. Quelle: Symantec
Datenlecks zum Stöbern …
• http://www.projekt-datenschutz.de/
• http://opalkatze.wordpress.com/to-becontinue/datenpannen/ (Listen für 2009 – 2013)
• http://www.datenleck.net/
Dr. Karsten Tolle – PRG2 – SS 2014
24
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 2014
25
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.1/de/grant.html
Dr. Karsten Tolle – PRG2 – SS 2014
26
Grant und Revoke unter Workbench
Dr. Karsten Tolle – PRG2 – SS 2014
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 2014
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 2014
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 2014
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;
• „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 2014
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 2014
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 2014
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 2014
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 2014
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 (testen lassen)
Siehe auch (für PHP):
– 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 2014
37
Sicherheit
Auf DBMS-Ebene
Auf Programmier-Ebene
• Benutzer entsprechend
anlegen
• Bereitstellung von Views
• Überwachung
• …
• Wenig Infos nach Außen
• Mittel der verwendeten
Prog. Sprache verwenden
(z.B. PreparedStatement in
Java oder EscapeFunktionen in PHP)
• Entsprechende Tests
vorsehen
• …
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 2014
39
Herunterladen