Datenbanken Datenintegrität + Datenschutz Tobias Galliat Sommersemester 2012 Professoren Studenten Vorlesungen MatrNr Name Semester 226 24002 Xenokrates 18 C4 232 25403 Jonas Kopernikus C3 310 26120 2133 Popper C3 52 26830 2134 Augustinus C3 309 2136 Curie C4 2137 Kant C4 PersNr Name Rang Raum 2125 Sokrates C4 2126 Russel 2127 VorlNr Titel SWS gelesen von 12 5001 Grundzüge 4 2137 Fichte 10 5041 Ethik 4 2125 Aristoxenos 8 5043 Erkenntnistheorie 3 2126 27550 Schopenhauer 6 5049 Mäeutik 2 2125 36 28106 Carnap 3 4052 Logik 4 2125 7 29120 Theophrastos 2 5052 Wissenschaftstheorie 3 2126 29555 Feuerbach 2 5216 Bioethik 2 2126 5259 Der Wiener Kreis 2 2133 5022 Glaube und Wissen 2 2134 4630 Die 3 Kritiken 4 2137 voraussetzen hören Vorgänger Nachfolger 5001 5041 MatrNr VorlNr 5001 5043 26120 5001 5001 5049 27550 5001 5041 5216 27550 4052 5043 5052 28106 5041 5041 5052 28106 5052 5052 5259 28106 5216 PerslNr Name Fachgebiet Boss 28106 5259 3002 Platon Ideenlehre 2125 29120 5001 3003 Aristoteles Syllogistik 2125 29120 5041 3004 Wittgenstein Sprachtheorie 2126 29120 5049 3005 Rhetikus Planetenbewegung 2127 Keplersche Gesetze 2 2127 prüfen Die relationale FH-DB Assistenten MatrNr VorlNr PersNr Note 28106 5001 2126 1 25403 5041 2125 2 29555 5022 3006 Newton 27550 4630 2137 2 25403 5022 3007 Spinoza Gott und Natur 2126 Datenintegrität • Integritätsbedingungen (Modellierung) – Schlüssel – Funktionalitäten bei Beziehungen – Attributdomänen – Inklusion bei Generalisierung • statische Integritätsbedingungen – Bedingungen an den Zustand der Datenbasis • referentielle (dynamische) Integritätsbedingungen – Bedingungen an Zustandsübergänge 3 Statische Integritätsbedingungen • Wertebereichseinschränkungen create table Studenten (… Semester integer, check (Semester between 1 and 18) ); • Aufzählungstypen create table Professoren (… Rang char(2), check (Rang in (`C2´, `C3´, `C4´) ); 4 Referentielle Integritätsbedingungen Fremdschlüssel (foreign key) • verweisen auf Tupel einer anderen Tabelle • z.B. gelesenVon in Vorlesungen verweist auf Tupel in Professoren referentielle Integrität • Fremdschlüssel müssen auf existierende Tupel verweisen oder einen Nullwert enthalten 5 Referentielle Integrität in SQL • Primärschlüssel: primary key • Fremdschlüssel: foreign key • Beispiel: create table Professoren ( PersNr integer primary key, ... ); create table Assistenten ( ..., foreign key (Boss) references Professoren ); 6 Einhaltung referentieller Integrität Änderung von referenzierten Daten 1. Default: Zurückweisen der Änderungsoperation 2. Propagieren der Änderungen: cascade 3. Verweise auf Nullwert setzen: set null 7 Einhaltung referentieller Integrität Assistenten Originalzustand Boss 2125 Professoren PersNr 2125 2125 2126 2126 … … Änderungsoperationen update Professoren delete from Professoren set PersNr = 3125 where PersNr = 2125; where PersNr = 2125; 8 Kaskadieren Assistenten Boss 3125 3125 2126 Professoren PersNr 3125 2126 Assistenten Boss 2126 … Professoren PersNr 2126 … … … create table Assistenten ( ..., foreign key (Boss) references Professoren on update cascade ); create table Assistenten ( ..., foreign key (Boss) references Professoren on delete cascade ); 9 Auf NULL setzen Assistenten Boss null null 2126 Assistenten Professoren PersNr Boss null 3125 null 2126 … … create table Assistenten ( ..., foreign key (Boss) references Professoren on update set null ); Professoren PersNr 2126 … 2126 … create table Assistenten ( ..., foreign key (Boss) references Professoren on delete set null ); 10 Daten-Definition FH-DB mit Integritätsbedingungen create table Studenten (MatrNr integer primary key, Name varchar(30) not null, Semester integer, check (Semester between 1 and 18)); create table Professoren (PersNr integer primary key, Name varchar(30) not null, Rang char(2), check (Rang in (`C2´,`C3´,`C4´)), Raum integer); 11 create table Assistenten (PersNr integer primary key, Name varchar(30) not null, Fachgebiet varchar(30), Boss integer, foreign key (Boss) references Professoren on delete set null); create table Vorlesungen (VorlNr integer primary key, Titel varchar(30), SWS integer, gelesenVon integer, foreign key (gelesenVon) references Professoren on delete set null); 12 create table hören (MatrNr integer, foreign key (MatrNr) references Studenten on delete cascade, VorlNr integer, foreign key (VorlNr) references Vorlesungen on delete cascade, primary key (MatrNr, VorlNr)); create table voraussetzen (Vorgänger integer, foreign key (Vorgänger) references Vorlesungen on delete cascade, Nachfolger integer, foreign key (Nachfolger) references Vorlesungen on delete cascade, primary key (Vorgänger, Nachfolger)); 13 create table prüfen ( MatrNr integer, foreign key (MatrNr) references Studenten on delete cascade, VorlNr integer, foreign key (VorlNr) references Vorlesungen, PersNr integer, foreign key (PersNr) references Professoren on delete set null, Note numeric (2,1), check (Note between 0.7 and 5.0), primary key (MatrNr, VorlNr)); 14 Ebenen des Datenschutzes legislative Maßnahmen organisatorische Maßnahmen Authentisierung Zugriffskontrolle Kryptographie Datenbank 15 Zugriffskontrolle in SQL • Lese-Erlaubnis grant select on Professoren to galliat; • Update-Erlaubnis grant update (MatrNr, VorlNr, PersNr) on prüfen to galliat; 16 Zugriffskontrolle in SQL • Weitere Rechte: – delete – insert – references • Weitergabe von Rechten: – with grant option • Entzug von Rechten: revoke update (MatrNr, VorlNr, PersNr) on prüfen from galliat cascade; 17