51
Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

Embed Size (px)

Citation preview

Page 1: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

Dr. Brigitte Mathiak

Kapitel 8

Datenintegrität, Views undZugriffsrechte

Page 2: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Lernziele

Verankerung von Integritätsregeln in DB effektivere Integritätssicherung einfachere Anwendungsprogrammierung

• Integritätsbedingungen Constraints und Assertions Triggers

• Views• Zugriffskontrolle

Page 3: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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 3

Page 4: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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 BedingungenZeitpunkt 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

Page 5: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Page 6: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Ausdrucksmittel zur Spezifikation von Integritätsbedingungen

Constraints beim Create Table

Create Assertion

Create Trigger

nur statischeIntegritätsbedingungen

Page 7: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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 ::= [CONSTRAINT constrname] { UNIQUE colname {, colname …} | PRIMARY KEY colname {, colname …} | CHECK (searchcond) | FOREIGN KEY colname {, colname …} REFERENCES tablename [(colname)] […] }CREATE ASSERTION assertname CHECK (searchcond) [ INITIALLY {DEFERRED | IMMEDIATE} ]

Page 8: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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) )

Page 9: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Semantik von Constraints und AssertionsSemantik von CHECK (searchcond)mit sql2trc‘[searchcond] = F(t1, ..., tn) mit freien Variablen t1, ..., tn:

t1 ... tn ( ( t1R1 ... tnRn ) F(t1, ..., tn) )

Semantik der Datenbank aus logischer Sicht: H I1 ... Im mit elementarer Formel (Fakten) H und Integritätsbed. I1, ..., Im

Ij

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 searchcondund Test auf Leerheit des Resultats

Zeitpunkt der Integritätsprüfung:nach der SQL-Anweisung (... IMMEDIATE) oderam Ende der Transaktion (... DEFERRED)

Reaktion bei Integritätsverletzung: Rollback

Page 10: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Statische Integritätsbedingungen: Beispiele

Kandidatenschlüssel: UNIQUEPrimärschlüssel: PRIMARY KEYFremdschlüssel: FOREIGN KEY

Wertebereichseinschränkungen... CHECK (Semester BETWEEN 1 AND 13)

Aufzählungstypen... CHECK (Rang IN ('C2', 'C3', 'C4'))

Page 11: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Page 12: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Page 13: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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;

Page 14: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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);

Page 15: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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,

Name varchar(30) NOT NULL,

Rang character(2) CHECK (Rang IN ('C2', 'C3', 'C4')),

Raum integer UNIQUE );

Page 16: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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));

Page 17: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Referentielle Integrität: Motivation

Fremdschlüsselverweisen auf Tupel einer Relationz.B. gelesenVon in Vorlesungen verweist auf Tupel in Professoren

referentielle IntegritätFremdschlüssel müssen auf existierende Tupel verweisen oder

einen Nullwert enthalten (für Bootstrapping z.B.)

Page 18: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Referentielle Integrität in SQL: Motivation

CREATE TABLE R( MyKey integer PRIMARY KEY, ….);

CREATE TABLE S( ...,RefKey integer REFERENCES R (MyKey) );

Page 19: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Einhaltung referentieller Integrität

SRefKey

x1

x2

RMyKey

x1

x2

Originalzustand

Mögliche Änderungsoperationen:

UPDATE R

SET MyKey = x5

WHERE MyKey = x1 ;

DELETE FROM R

WHERE MyKey = x1 ;

Page 20: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

SRefKey

x5

x2

RMyKey

x5

x2

SRefKey

x2

RMyKey

x2

Kaskadieren

CREATE TABLE S

( ...,

RefKey integer REFERENCES R

ON UPDATE CASCADE );

CREATE TABLE S

( ...,

RefKey integer REFERENCES R

ON DELETE CASCADE );

Page 21: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

SRefKey

NULL

x2

RMyKey

x5

x2

Auf NULL bzw. DEFAULT-Wert setzen

CREATE TABLE S

( ...,

RefKey integer REFERENCES R

ON UPDATE SET NULL );

CREATE TABLE S

( ...,

RefKey integer REFERENCES R

ON DELETE SET NULL );

SRefKey

NULL

x2

RMyKey

x2

Page 22: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Ü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 ( tR ( (t.A1= … t.Am=) (t1 … tm (t1R1 … tmRm 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

Page 23: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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);

Page 24: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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)

Page 25: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Page 26: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Datenbank-Trigger: Beispiel (1)

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);

"keine Verringerung von Semestern":

Page 27: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Datenbank-Trigger: Beispiel (2)

CREATE TRIGGER SemesterKontrolle

BEFORE UPDATE OF Semester ON Studenten

FOR EACH ROW

WHEN (old.Semester > new.Semester)

BEGIN

ROLLBACK;

END;

"keine Verringerung von Semestern" in Oracle Syntax

Page 28: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Datenbank-Trigger: Beispiel (3)

"keine Degradierung von Professoren" mit PL/SQL

Diese Programmiersprache heißt PL/SQL und ist

nicht prüfungsrelevant

CREATE TRIGGER ProfKontrolleBEFORE UPDATE OF Rang ON ProfessorenFOR EACH ROWWHEN (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' end if; if :new.Rang is null then

:new.Rang := :old.Rang; end if;END;

Page 29: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Datenbank-Trigger: Beispiel (4)

CREATE TRIGGER NotenspiegelAFTER INSERT OR UPDATE OF Note ON prüfenBEGIN UPDATE Statistik SET avgNote = SELECT avg(Note) FROM prüfen; COMMIT; END;

CREATE TRIGGER UpdateVorraussetzen_recAFTER INSERT ON VorraussetzenBEGIN INSERT INTO Vorraussetzen_rec END;

"Überwachung des Notenspiegels"

Page 30: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Page 31: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

Sichten

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

Page 32: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Views (Sichten, Virtuelle Relationen)

Ziel: simplifizieren Integritätsssicherung, Anfragen und Schemaänderungen

Sicht 1 (Verwaltung) Sicht k (Bibliothek)...

Physische Ebene

Logische Ebene

Page 33: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Views (Sichten, Virtuelle Relationen)

Grobsyntax:CREATE VIEW view-name [ ( column {, column …} ) ]AS select-block [ WITH CHECK OPTION ]

Für CREATE VIEW VIRT AS viewquery istsql2ra [SELECT A1, …, Am FROM TAB1, …, TABk, VIRT WHERE F]= [A1, ..., Am] ( sql2ra’ [F] (TAB1 … TABk sql2ra[viewquery]))

Page 34: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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);

Page 35: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

.. 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' ;

Sichten: Verwendung

Page 36: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Sichten zur Modellierung von Generalisierung(Vertikale Partitionierung)

CREATE TABLE Angestellte

(PersNr integer not null,

Name varchar (30) not null);

CREATE TABLE ProfDaten

(PersNr integer not null,

Rang character(2),

Raum integer);

CREATE TABLE AssiDaten

(PersNr integer not null,

Fachgebiet varchar(30),

Boss integer);

Page 37: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

CREATE VIEW Professoren AS

SELECT *

FROM Angestellte a, ProfDaten d

WHERE a.PersNr=d.PersNr;

CREATE VIEW Assistenten AS

SELECT *

FROM Angestellte a, AssiDaten d

WHERE a.PersNr=d.PersNr;

Untertypen als Views

Sichten zur Modellierung von Generalisierung(Vertikale Partitionierung) (2)

Page 38: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

CREATE TABLE Professoren

(PersNr integer not null,

Name varchar (30) not null,

Rang character (2),

Raum integer);

CREATE TABLE Assistenten

(PersNr integer not null,

Name varchar (30) not null,

Fachgebiet varchar (30),

Boss integer);

CREATE TABLE AndereAngestellte

(PersNr integer not null,

Name varchar (30) not null);

Sichten zur Modellierung von Generalisierung(Horizontale Partitionierung)

Page 39: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

CREATE VIEW Angestellte AS

(SELECT PersNr, Name

FROM Professoren)

UNION

(SELECT PersNr, Name

FROM Assistenten)

UNION

(SELECT PersNr, Name

FROM AndereAngestellte);

Obertyp als View

Sichten zur Modellierung von Generalisierung(Horizontale Partitionierung) (2)

Page 40: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Page 41: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Updates auf Views

d u’(d) update u’

view q view q q(d) u(q(d)) = q(u’(d))

update u

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.

Page 42: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Ä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

Page 43: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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');

Page 44: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Page 45: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Page 46: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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 undSubjekte, 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 ]

Page 47: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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) RESOURCEAnlegen 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

…….

Page 48: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

….

Page 49: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

Zugriffskontrolle – Beispiele (2)

Meier bekommt das Recht, Personendaten der Studenten im 1..3 Semesterzu lesen. Er kann das Recht an andere DB-User weitergeben:

CREATE VIEW YoungStudents AS SELECT * FROM StudentsWHERE Semester <= 3;

GRANT SELECT ON YoungStudents TO MeierWITH GRANT OPTION;

Page 50: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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

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

Meier: 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

Page 51: Dr. Brigitte Mathiak Kapitel 8 Datenintegrität, Views und Zugriffsrechte

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 51