Datenintegrität, Views und Zugriffsrechte

Slides:



Advertisements
Ähnliche Präsentationen
Sicherheitsaspekte Sicherheit im DBMS
Advertisements

Datenintegrität Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen Formulierung von Integritätsbedingungen.
Datenintegrität Integitätsbedingungen Schlüssel
spezielle Nutzersichten formale Ebene (deskriptive Regeln)
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
© A. Kemper / A. Eickler1 Kapitel 5: Datenintegrität Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung.
Bauinformatik II Softwareanwendungen 1
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Datenintegrität, Views und Zugriffsrechte
Grundlagen Datenbanken
SQL als Abfragesprache
SQL als Abfragesprache
Datensicherheit in DBMS
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Prof. Dr. T. Kudraß1 Integrität in Datenbanken. Prof. Dr. T. Kudraß2 Unterschied Konsistenz - Integrität Konsistenz beschreibt die Korrektheit der DB-internen.
Datenintegrität Referentielle Integrität create table
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
Informationssysteme SS Kapitel 7: Die Datenbanksprache SQL 7.1 Datendefinition 7.2 Einfache Anfragen 7.3 Semantik einfacher SQL-Anfragen 7.4 Erweiterte.
Kapitel 9: Integritätssicherung
Datenbanken 10: Einfügen, Ändern, Löschen
3.5.2 Fremdschlüssel/ Referentielle Integrität (6/9)
3.5.2 Fremdschlüssel/ Referentielle Integrität (1/9)
2.2 Definition eines Datenbankschemas (SQL-DDL)
objekt-relationale Datenbanken
Datenbankentwicklung IV-LK
Relationale Datenbanken III
FH-Hof Standard Query Language Richard Göbel. FH-Hof Geschichte der Sprache SQL System/R-Projekts von IBM zu Beginn der 70er Jahre: Entwicklung der Sprache.
Betrieb von Datenbanken Marco Skulschus & Marcus Wiederstein Datenmanipulation Lehrbuch, Kapitel 4.
Datenintegrität Integitätsbedingungen Schlüssel
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #8 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #8 Wiederholung: Referentielle Integrität/ Embedded SQL.
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Datenbanksysteme für hörer anderer Fachrichtungen
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Relationales Datenmodell und DDL
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Vorlesung #5 SQL (Teil 2).
Transaktionsverwaltung
Integritätsbedingungen (Constraints)
1 Referenzielle Konsistenz (1) Vorgehensweise: Klausel references mit nachfolgender Spezikation eines Attributs einer anderen Tabelle identifiziert ein.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
11 Zugriffskontrolle (Access Control) Ziele Privilegien Rollen GRANT und REVOKE Befehl Privilegien Rollen GRANT und REVOKE Befehl.
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
SQL Lutz KleinostendarpJOBELMANN-SCHULE Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer.
SQL Basics Schulung –
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
Vorlesung #7 SQL (Teil 4).
Create Table, Rechte und Rollen
 Präsentation transkript:

Datenintegrität, Views und Zugriffsrechte Kapitel 8 Datenintegrität, Views und Zugriffsrechte

 Verankerung von Integritätsregeln in DB Lernziele  Verankerung von Integritätsregeln in DB  effektivere Integritätssicherung  einfachere Anwendungsprogrammierung Integritätsbedingungen Constraints und Assertions Triggers Views Zugriffskontrolle Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Eine Datenbank ist nur so gut wie ihre Daten Motivation Eine Datenbank ist nur so gut wie ihre Daten Wenn die Daten nicht korrekt kann dies schlimmere Folgen haben als jeder Bug Bestimmte Arten von Korrektheit können automatisch überprüft werden Der Computer hat wenig Chance zu wissen, dass Lisa Müller nicht am 14.3.1972 geboren wurde Der Computer kann aber wissen, dass Lisa Müller nicht am 31.2.1900 geboren wurde Am fatalsten sind Fehler die die angenommene Datenstruktur untergraben, z.B. doppelt vergeben Schlüssel Diese sind aber relativ einfach zu finden Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Typen der Integritätsbedingungen Statische Bedingungen Invarianten des Datenmodells (Primärschlüssel, Fremdschlüssel) Anwendungsspezifische Anforderungen bzgl. eines Attributes im Tupel bzgl. mehrerer Attribute im Tupel bzgl. mehrerer Tupel der Relation bzgl. mehrerer Relationen Dynamische Bedingungen Zeitpunkt der Überprüfung: - Ende des SQL-Befehls - Ende der Transaktion Reaktion auf Verletzung: - Nichtausführung bzw. Rückgängigmachen der Anweisung - Abbruch der Transaktion - Ausführung von Folgeänderungen Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Integritätsbedingungen: Beispiele Statische Bedingungen: Jeder Student hat eine Matrikelnummer Alle Noten liegen zwischen 1.0 und 5.0 Ein Seminar kann von maximal 20 Teilnehmern belegt werden Zwei Veranstaltungen können nicht zeitlich überlappend im selben Raum stattfinden Dynamische Bedingungen: Die Prüfung in einem bestimmten Fach kann von dem Teilnehmer maximal dreimal wiederholt werden Status "teilgenommen" ändert nur in "bestanden" oder "nicht bestanden" Status "bestanden" kann nicht mehr geändert werden Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Ausdrucksmittel zur Spezifikation von Integritätsbedingungen Constraints beim Create Table Create Assertion Create Trigger nur statische Integritätsbedingungen Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Syntax von Constraints und Assertions CREATE TABLE tablename ( colname datatype [DEFAULT {defaultconst | NULL}] [colconstraint {, colconstraint …}], {, colname datatype [DEFAULT {defaultconst | NULL}] [colconstraint {, colconstraint …}] …} ) [tabconstraint {, tabconstraint …}] colconstraint ::= NOT NULL | [CONSTRAINT constrname] { UNIQUE | PRIMARY KEY | CHECK (searchcond) | REFERENCES tablename [(colname)] […] } tabconstraint ::= { UNIQUE colname {, colname …} | PRIMARY KEY colname {, colname …} | CHECK (searchcond) | FOREIGN KEY colname {, colname …} CREATE ASSERTION assertname CHECK (searchcond) [ INITIALLY {DEFERRED | IMMEDIATE} ] Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Constraints: Beispiel Die Constraints der Relation 'Studenten' in der entsprechenden DDL-Anweisung in SQL: CREATE TABLE Studenten ( MatrNr integer PRIMARY KEY, VersNr integer UNIQUE, Name varchar(30) NOT NULL, Semester integer DEFAULT 1 NOT NULL CHECK (Semester BETWEEN 1 AND 13) ) Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Semantik von Constraints und Assertions Semantik von CHECK (searchcond) mit sql2trc‘[searchcond] = F(t1, ..., tn) mit freien Variablen t1, ..., tn: t1 ... tn ( ( t1R1  ...  tnRn )  F(t1, ..., tn) ) Ij Semantik der Datenbank aus logischer Sicht: H  I1  ...  Im mit elementarer Formel (Fakten) H und Integritätsbed. I1, ..., Im Mögliche Implementierung (die tatsächlich ist deutlich optimierter): bei potentieller Verletzung von Ij Ausführen von SELECT t1, ..., tn FROM R1, ..., Rn WHERE NOT searchcond und Test auf Leerheit des Resultats Zeitpunkt der Integritätsprüfung: nach der SQL-Anweisung (... IMMEDIATE) oder am Ende der Transaktion (... DEFERRED) Reaktion bei Integritätsverletzung: Rollback Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Statische Integritätsbedingungen: Beispiele Kandidatenschlüssel: UNIQUE Primärschlüssel: PRIMARY KEY Fremdschlüssel: FOREIGN KEY Wertebereichseinschränkungen ... CHECK (Semester BETWEEN 1 AND 13) Aufzählungstypen ... CHECK (Rang IN ('C2', 'C3', 'C4')) Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Constraints: Beispiel  Constraints der Relation 'Studenten': Matrikelnummer ist für jede Person eindeutig identifizierend und soll in der Relation als Primärschlüssel verwendet werden. Versicherungsnummer ist ebenfalls eindeutig identifizierend; jede Versicherungsnummer darf in der Relation nur einmal vorkommen. Angaben über den Namen dürfen nicht fehlen (d.h. Nullwerte sind in diesem Attribut nicht zulässig). Angaben über Semester fürfen nicht fehlen (d.h. Nullwerte sind in diesem Attribut nicht zulässig). Es gibt nur Semester zwischen 1..13. Neue Studenten sind immer dem 1. Semester zuzuordnen, sofern nicht ein anderes Semester explizit angegeben wurde Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Constraints: Beispiel (2) Hinweis: "attributspezifische" Constraints können sich i.d.R. nur auf einzelne Attribute beziehen, bei deren Definition sie angegeben sind Die folgende Form ist z.B. in Oracle nicht zulässig: CREATE TABLE Studenten ( MatrNr integer PRIMARY KEY, VersNr integer UNIQUE CHECK (Semester BETWEEN 1 AND 13) ), Name varchar(30) NOT NULL, Semester integer DEFAULT 1 NOT NULL Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Constraints: Beispiel (3) Constraints können auch explizit mit Namen am Ende des Create Table genannt werden: CREATE TABLE Studenten ( MatrNr integer PRIMARY KEY, VersNr integer UNIQUE, Name varchar(30) NOT NULL, Semester integer NOT NULL CONSTRAINT SemCheck CHECK (Semester BETWEEN 1 AND 13)) ; Vorteil: ALTER TABLE Studenten DROP CONSTRAINT SemCheck; Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Constraints: Beispiel (4) CREATE TABLE Studenten ( MatrNr integer, VersNr integer, Name varchar(30), Semester integer, PRIMARY KEY (MatrNr), CONSTRAINT s1 CHECK (Name IS NOT NULL), CONSTRAINT s2 UNIQUE (VersNr), CONSTRAINT s3 CHECK (Semester IS NOT NULL), CONSTRAINT s4 CHECK (Semester BETWEEN 1 AND 13) ); ALTER TABLE Studenten DROP CONSTRAINT s4; ALTER TABLE Studenten ADD CONSTRAINT s4 CHECK (Semester BETWEEN 1 AND 15); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Constraints: Beispiel (5) CREATE TABLE Studenten ( MatrNr integer PRIMARY KEY, Name varchar(30) NOT NULL, Semester integer NOT NULL CHECK (Semester BETWEEN 1 AND 13)); CREATE TABLE Professoren ( PersNr integer PRIMARY KEY, Rang character(2) CHECK (Rang IN ('C2', 'C3', 'C4')), Raum integer UNIQUE ); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Assertions: Beispiel CREATE TABLE Professoren (…) CREATE TABLE Studenten (…) Wohin kommt das Constraint "Professoren sind keine Studenten"? CREATE ASSERTION ProfNotStudent CHECK (NOT EXISTS ( SELECT AusweisNo FROM Professoren INTERSECT SELECT AusweisNo FROM Studenten)); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Referentielle Integrität: Motivation Fremdschlüssel verweisen auf Tupel einer Relation 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 (für Bootstrapping z.B.) Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Referentielle Integrität in SQL: Motivation CREATE TABLE R ( MyKey integer PRIMARY KEY, ….); CREATE TABLE S ( ..., RefKey integer REFERENCES R (MyKey) ); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Einhaltung referentieller Integrität Originalzustand S RefKey x1 x2 R MyKey x1 x2 Mögliche Änderungsoperationen: UPDATE R SET MyKey = x5 WHERE MyKey = x1 ; DELETE FROM R WHERE MyKey = x1 ; Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Kaskadieren S x5 x2 R x5 x2 S x2 R x2 RefKey MyKey RefKey MyKey CREATE TABLE S ( ..., RefKey integer REFERENCES R ON UPDATE CASCADE ); CREATE TABLE S ( ..., RefKey integer REFERENCES R ON DELETE CASCADE ); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Auf NULL bzw. DEFAULT-Wert setzen RefKey NULL x2 R MyKey x5 x2 S RefKey NULL x2 R MyKey x2 CREATE TABLE S ( ..., RefKey integer REFERENCES R ON UPDATE SET NULL ); CREATE TABLE S ( ..., RefKey integer REFERENCES R ON DELETE SET NULL ); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Übersicht: Optionen für Fremdschlüsselbedingungen Grobsyntax: ... FOREIGN KEY ( column {, column …} ) REFERENCES [user .] table [ ( column {, column …} ) ] [ON DELETE {NO ACTION | CASCADE | SET NULL | SET DEFAULT}] [ON UPDATE {NO ACTION | CASCADE | SET NULL | SET DEFAULT}] [INITIALLY {IMMEDIATE | DEFERRED}] … Semantik von CREATE TABLE R ... FOREIGN KEY A1, …, Am REFERENCES R1 (B1), …, Rm (Bm): t ( tR  ( (t.A1=  …  t.Am=)  (t1 … tm (t1R1  …  tmRm  t1.B1=t.A1  ...  tm.Bm=t.Am)) ) ) Reaktion bei Integritätsverletzung: Zurückweisung der Löschung/Änderung (bei NO ACTION) Löschen/Ändern aller "abhängigen" Tupel (bei CASCADE) Fremdschlüssel in "abhängigen" Tupeln auf Default-/Nullwert setzen Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Referentielle Integrität: Beispiel (1) CREATE TABLE hören (MatrNr integer REFERENCES Studenten(MatrNr) ON DELETE CASCADE, VorlNr integer REFERENCES Vorlesungen(VorlNr) ON DELETE CASCADE, PRIMARY KEY (MatrNr, VorlNr)); "Anmeldungen der Gasthörer zu Vorlesungen": CREATE TABLE gasthören ( MatrNr integer, VorlNr integer, … PRIMARY KEY (MatrNr, VorlNr), FOREIGN KEY (MatrNr, VorlNr) REFERENCES hören (MatrNr,VorlNr) ON DELETE CASCADE); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Referentielle Integrität: Beispiel (2) CREATE TABLE Assistenten ( PersNr integer PRIMARY KEY, Name varchar(30) NOT NULL, Fachgebiet varchar(30), Boss integer, FOREIGN KEY (Boss) REFERENCES Professoren (PersNr) ON UPDATE CASCADE ON DELETE SET NULL); Hinweis: "ON UPDATE CASCADE" wird von Oracle nicht direkt unterstützt (kann jedoch bei Bedarf duch andere Mechanismen realisiert werden -> Trigger) Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Syntax und Semantik von CREATE TRIGGER Grobsyntax: CREATE TRIGGER trigger-name {BEFORE | AFTER | INSTEAD OF} { DELETE | INSERT | UPDATE [OF column {, column …}] } ON table [ REFERENCING OLD AS corrvar NEW AS corrvar ] [ FOR EACH ROW | FOR EACH STATEMENT ] [ WHEN ( condition ) ] ( statement-sequence ) Semantik mit sql2trc‘[condition] = F: Werte F bei spez. Ereignis aus und starte Aktion, falls F wahr Fall 1 (FOR EACH STATEMENT): F hat keine freien Variablen Fall 2 (FOR EACH ROW): F hat eine oder zwei freie Variablen – told und tnew -, die an den alten bzw. neuen Wert des jeweiligen Tupels gebunden werden Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Datenbank-Trigger: Beispiel (1) "keine Verringerung von Semestern": CREATE TRIGGER SemesterKontrolle BEFORE UPDATE OF Semester ON Studenten FOR EACH ROW REFERENCING OLD AS :old, NEW as :new WHEN (:old.Semester > :new.Semester) (ROLLBACK WORK); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Datenbank-Trigger: Beispiel (2) "keine Verringerung von Semestern" in Oracle Syntax CREATE TRIGGER SemesterKontrolle BEFORE UPDATE OF Semester ON Studenten FOR EACH ROW WHEN (old.Semester > new.Semester) BEGIN ROLLBACK; END; Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Datenbank-Trigger: Beispiel (3) "keine Degradierung von Professoren" mit PL/SQL CREATE TRIGGER ProfKontrolle BEFORE UPDATE OF Rang ON Professoren FOR EACH ROW WHEN (old.Rang IS NOT NULL) BEGIN if :old.Rang = 'C3' and :new.Rang = 'C2' then :new.Rang := 'C3'; end if; if :old.Rang = 'C4' then :new.Rang := 'C4' if :new.Rang is null then :new.Rang := :old.Rang; END; Diese Programmiersprache heißt PL/SQL und ist nicht prüfungsrelevant Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Datenbank-Trigger: Beispiel (4) "Überwachung des Notenspiegels" CREATE TRIGGER Notenspiegel AFTER INSERT OR UPDATE OF Note ON prüfen BEGIN UPDATE Statistik SET avgNote = SELECT avg(Note) FROM prüfen; COMMIT; END; CREATE TRIGGER UpdateVorraussetzen_rec AFTER INSERT ON Vorraussetzen INSERT INTO Vorraussetzen_rec Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Trigger: eine Problemquelle? Effekte von Triggern (z.B. Updates) können in Folge weitere Trigger auslösen! Nebeneffekte der verketteten Trigger-Ausführung z.T. abhängig von der Reihenfolge Ergebnis der komplexen Verkettungen oft schwer vorhersehbar Viele Trigger können die Performanz extrem verschlechtern Fazit: Trigger sparsam einsetzen Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Sichten Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Views (Sichten, Virtuelle Relationen)  ... Sicht 1 (Verwaltung) Sicht k (Bibliothek) Logische Ebene Physische Ebene Ziel: simplifizieren Integritätsssicherung, Anfragen und Schemaänderungen Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Views (Sichten, Virtuelle Relationen) Grobsyntax: CREATE VIEW view-name [ ( column {, column …} ) ] AS select-block [ WITH CHECK OPTION ] Für CREATE VIEW VIRT AS viewquery ist sql2ra [SELECT A1, …, Am FROM TAB1, …, TABk, VIRT WHERE F] = [A1, ..., Am] ( sql2ra’ [F] (TAB1  …  TABk  sql2ra[viewquery])) Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

CREATE VIEW prüfenSicht as SELECT MatrNr, VorlNr, PersNr FROM prüfen; Sichten: Verwendung .. für den Datenschutz CREATE VIEW prüfenSicht as SELECT MatrNr, VorlNr, PersNr FROM prüfen; .. statistische Sicht CREATE VIEW PruefGuete(Name, GueteGrad) AS (SELECT p.Name, AVG(p.Note) FROM Professoren p, prüfen e WHERE p.PersNr = e.PersNr GROUP BY p.Name, p.PersNr HAVING COUNT(*) > 50); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

.. für die Vereinfachung von Anfagen: Sichten: Verwendung .. für die Vereinfachung von Anfagen: CREATE VIEW StudProf (Sname, Semester, Titel, Pname) as SELECT s.Name, s.Semester, v.Titel, p.Name FROM Studenten s, hören h, Vorlesungen v, Professoren p WHERE s.Matr.Nr=h.MatrNr and h.VorlNr=v.VorlNr and v.gelesenVon = p.PersNr ; SELECT DISTINCT Semester FROM StudProf WHERE PName='Sokrates' ; Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Sichten zur Modellierung von Generalisierung (Vertikale Partitionierung) CREATE TABLE Angestellte (PersNr integer not null, Name varchar (30) not null); CREATE TABLE ProfDaten Rang character(2), Raum integer); CREATE TABLE AssiDaten (PersNr integer not null, Fachgebiet varchar(30), Boss integer); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Sichten zur Modellierung von Generalisierung (Vertikale Partitionierung) (2) CREATE VIEW Professoren AS SELECT * FROM Angestellte a, ProfDaten d WHERE a.PersNr=d.PersNr; CREATE VIEW Assistenten AS FROM Angestellte a, AssiDaten d  Untertypen als Views Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Sichten zur Modellierung von Generalisierung (Horizontale Partitionierung) CREATE TABLE Professoren (PersNr integer not null, Name varchar (30) not null, Rang character (2), Raum integer); CREATE TABLE Assistenten Fachgebiet varchar (30), Boss integer); CREATE TABLE AndereAngestellte Name varchar (30) not null); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

CREATE VIEW Angestellte AS (SELECT PersNr, Name FROM Professoren) Sichten zur Modellierung von Generalisierung (Horizontale Partitionierung) (2) CREATE VIEW Angestellte AS (SELECT PersNr, Name FROM Professoren) UNION FROM Assistenten) FROM AndereAngestellte);  Obertyp als View Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Views zur Maskierung von Schemaänderungen 1) bisherige Anfrage: SELECT * FROM Professoren WHERE PersNr = 1234 2) Schemaänderung (plus Datenbank aktualisieren oder neu laden): a) ALTER TABLE Professoren ADD Vorname VARCHAR(20), Nachname VARCHAR(20) b) UPDATE Professoren SET Vorname = SUBSTR (Name, ...), Nachname = SUBSTR (Name, ...) c) ALTER TABLE Professoren DROP Name 3) Vorgehen zur "Bewahrung" der bisherigen Anfrage: A) Professoren in ProfessorenDaten umbenennen B) CREATE VIEW Professoren (PersNr, Name, Rang, Raum) AS SELECT PersNr, Vorname | | ' ' | | Nachname, Rang, Raum FROM ProfessorenDaten Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

 Updates auf Views Sei D die Menge aller Datenbanken. Views und Updates sind partielle Funktionen q: D ® D, u: D ® D. Eine View q heißt änderbar genau dann, wenn es für jede Datenbank d, auf der q definiert ist, und jeden auf q(d) definierten Update u einen eindeutigen Update u' gibt, der auf d definiert ist und für den u(q(d)) = q(u'(d)) gilt. d  u’(d)  update u’  view q   view q   q(d)  u(q(d)) = q(u’(d)) update u Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Änderbarkeit von Sichten  in SQL nur eine Basisrelation Schlüssel muß vorhanden sein keine Aggregatfunktionen, Gruppierung und Duplikateliminierung alle Sichten theoretisch änderbare Sichten in SQL änderbare Sichten Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Probleme mit Updates auf Views: Beispiel  CREATE VIEW WieHartAlsPrüfer (PersNr, Durchschnittsnote) AS SELECT PersNr, AVG(Note) FROM prüfen GROUP BY PersNr; CREATE VIEW VorlesungenSicht AS SELECT Titel, SWS, Name FROM Vorlesungen, Professoren WHERE gelesen Von=PersNr; INSERT INTO VorlesungenSicht VALUES ('Nihilismus', 2, 'Nobody'); Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Materialized views (Snapshots)  Idee: Replikation der Daten in verteilten Umgebungen Caching der Ergebnisse von komplexen Queries (z.B. Data Warehouse) durch Materialisierung Bei Änderungen der Daten werden die Views aktualisiert Bei Updates der Views werden Änderungen zu den Relationen propagiert Grobsyntax: CREATE MATERIALIZED VIEW view-name [ ( column {, column …} ) ] [FOR UPDATE] AS select-block Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

 Zugriffskontrolle Unterschiedliche Aspekte: Data privacy: beschränkte Möglichkeiten, persönliche Daten zu speichern und zu verarbeiten (Datenschutz) Data security: beschränkte Möglichkeiten, auf gespeicherte Daten zuzugreifen (Datensicherheit) – Zugriffskontrolle, Autorisierung Maßnahmen zur Datensicherheit Organisationsmaßnahmen (z.B. Zugang zum Wireless-Netz) Technische Maßnahmen (Verschlüsselung) Maßnahmen des Betriebssystems (Firewalls, process isolation) Authentifizierung der DB-Benutzer Kontrolle der Zugriffsrechte der Benutzer beim Zugriff Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Rechtevergabe in SQL: Prinzip Subjekte haben Rechte (zur Ausführung von Operationen) auf Objekten. Der Erzeuger einer Tabelle ist deren Eigentümer. Rechte sind minimal, d.h. beschränkt auf den Eigentümer und Subjekte, denen explizit Rechte erteilt wurden. Vergabe von Rechten mit der GRANT-Anweisung in SQL. Grobsyntax: GRANT { ALL | privilege {, privilege ...} } ON { table | view } TO { PUBLIC | user {, user …} } [ WITH GRANT OPTION ] Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Rechtevergabe in SQL: mögliche Rechte SELECT lesender Zugriff auf eine Relation INSERT Einfügen in eine Relation UPDATE Ändern von Tupeln einer Relation (ggf. nur bestimmte Attribute) DELETE Löschen von Tupeln einer Relation CONNECT Verbindung zum DBS aufnehmen ("Login"-Recht) RESOURCE Anlegen neuer Relationen (ggf. mit Limit für den Plattenplatz) DBA Datenbankadministration (z.B. Aufruf von Dienstprogrammen) EXECUTE Ausführung eines Anwendungsprogramms IO_LIMIT Beschränkung des Ressourcenverbrauchs für SQL-Anweisungen ……. Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Zugriffskontrolle – Beispiele (1) Meier bekommt das Recht, Inhalte der Relation Studenten zu selektieren GRANT SELECT ON Studenten TO Meier Meier wird das Recht, Inhalte der Relation Studenten zu selektieren, entzogen REVOKE SELECT ON Studenten FROM Meier Meier bekommt das Recht, Prüfungsergebnisse zu ändern GRANT UPDATE ON prüfen TO Meier Alle bekommen das Recht, die Raumbelegung anzusehen: GRANT SELECT ON Raumbelegung TO PUBLIC …. Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Zugriffskontrolle – Beispiele (2) Meier bekommt das Recht, Personendaten der Studenten im 1..3 Semester zu lesen. Er kann das Recht an andere DB-User weitergeben: CREATE VIEW YoungStudents AS SELECT * FROM Students WHERE Semester <= 3; GRANT SELECT ON YoungStudents TO Meier WITH GRANT OPTION; Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Zugriffskontrolle – Beispiele (3) Meier: Eigentümer von MeierTable. Meier: GRANT SELECT ON MeierTable TO Schmid WITH GRANT OPTION Schmid: GRANT SELECT ON MeierTable TO Schmitz WITH GRANT OPTION REVOKE SELECT ON MeierTable FROM Schmid Schmitz: GRANT SELECT ON MeierTable TO Schmid - .. NICHT möglich ! REVOKE widerruft die Rechte von Schmid und Schmitz transitiv Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität

Fazit Es gibt eine Reihe von Möglichkeiten in der Datenbank auf die Datenintegrität zu achten. Nicht alle davon sind unproblematisch, es kann zu Kaskaden und irritierendem Verhalten kommen. Bei den meisten, insbesondere den einfachen, wie Checks und Schlüsselbedingungen, ist die etwas geringere Performanz jedoch ein Preis, den man unbedingt zahlen sollte um erhöhte Sicherheit bei der Datenkorrektheit zu erhalten. Worauf wir nicht eingegangen sind, ist das inhaltliche Problem, dass einem der Kunde oft Einschränkungen präsentiert, die in der Realität viele Ausnahmen haben (z.B. das Nachnamen nicht mehr als 40 Buchstaben haben oder sich nie ändern). Solche Checks können für die Benutzbarkeit der Datenbank sehr schlecht sein. Versuchen Sie solche Checks unbedingt zu vermeiden. Konzentrieren Sie sich stattdessen auf Checks, die zu technischen Problemen führen könnten. Datenbanken für Mathematiker, WS 11/12 Kapitel 8: Datenintegrität