Datenintegrität, Views und Zugriffsrechte



Ähnliche Dokumente
Referentielle Integrität

Referentielle Integrität

Datenintegrität. Bisherige Integritätsbedingungen

Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen

Datenintegrität. Arten von Integritätsbedingungen. Statische Integritätsbedingungen. Referentielle Integrität. Integritätsbedingungen in SQL.

Informatik für Ökonomen II: Datenintegrität. Prof. Dr. Carl-Christian Kanne

Datenintegrität. Kapitel 5 1

Datenbanksysteme 2013

Datenintegrität. Kapitel 5 1

Datenintegrität. Integitätsbedingungen Schlüssel Beziehungskardinalitäten Attributdomänen Inklusion bei Generalisierung

VO Datenmodellierung. Katrin Seyr

Kapitel 8: Datenintegrität

Datenintegrität. Arten von Integritätsbedingungen. Statische Integritätsbedingungen. Referentielle Integrität. Integritätsbedingungen in SQL.

Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung

SQL: statische Integrität

Bedingungen über Werte Statische Integrität. CHECK-Klausel

Datenintegrität. Referentielle Integrität. Referentielle Integrität in SQL. Bisherige Integritätsbedingungen

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

Datenbanken. Datenintegrität + Datenschutz. Tobias Galliat. Sommersemester 2012

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #5. SQL (Teil 3)

Referenzielle Integrität SQL

6. Datenintegrität. Integritätsbedingungen

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

Wiederholung VU Datenmodellierung

Wiederholung VU Datenmodellierung

Datenbanken: Datenintegrität.

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Universität Duisburg-Essen Informationssysteme Prof. Dr.-Ing. N. Fuhr. Praktikum Datenbanken / DB2 Woche 8: Trigger, SQL-PL

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Konstante Relationen

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

DB2 SQL, der Systemkatalog & Aktive Datenbanken

Sichten II. Definition einer Sicht. Sichten. Drei-Ebenen-Schema-Architektur. Vorteile Vereinfachung von Anfragen Strukturierung der Datenbank

Views in SQL. 2 Anlegen und Verwenden von Views 2

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

SQL. Fortgeschrittene Konzepte Auszug

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

6. Sichten, Integrität und Zugriffskontrolle. Vorlesung "Informa=onssysteme" Sommersemester 2015

Semantische Datenintegrität

Übung Datenbanken in der Praxis. Datenmodifikation mit SQL

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Benutzerverwaltung, Sichten und Datenintegrität

Kapitel 5 Dr. Jérôme Kunegis. SQL: Grundlagen. WeST Institut für Web Science & Technologien

Relationales Modell: SQL-DDL. SQL als Definitionssprache. 7. Datenbankdefinitionssprachen. Anforderungen an eine relationale DDL

Aufgabensammlung SQL SW4 1. Einfache Anfragen

Unterabfragen (Subqueries)

Schnellübersichten. SQL Grundlagen und Datenbankdesign

Create-Table-Befehl. CREATE TABLE Tabellenname ( { Spalte { Datentyp Gebietsname } [ Spaltenbedingung [ ] ] Tabellenbedingung }

Kapitel 7 Dr. Jérôme Kunegis. Logische Kalküle. WeST Web Science & Technologies

3.17 Zugriffskontrolle

DBS ::: SERIE 5. Join Right Semi- Join Left Semi-Join Projektion Selektion Fremdschlüssel. Kreuzprodukt

Bibliografische Informationen digitalisiert durch

Fortsetzung: Kreuzprodukt, Inner Join. Sortierung. Existenzquantor, Mengenvergleich Gruppierung, Aggregate Cast-Operator

5.3 Datenänderung/-zugriff mit SQL (DML)

Ein Ausflug zu ACCESS

Schlüssel bei temporalen Daten im relationalen Modell

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Objektrelationale Datenbanken

Labor 3 - Datenbank mit MySQL

Praktische SQL-Befehle

Datenbanktechnologie mit praktischen Übungen in MySQL und PHP

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Metadaten

4.14 Integrität und Trigger

Grundlagen von Datenbanken

desk.modul : WaWi- Export

Integritätsbedingungen / Normalformen- Beispiel: Kontoführung

Objektrelationale und erweiterbare Datenbanksysteme

Funktion definieren Gibt Summe der Gehälter zurück. Aufruf in einem SQL-Statement

Die Anweisung create table

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Prozedurale Datenbank- Anwendungsprogrammierung

7. Übung - Datenbanken

5. Datendefinition in SQL

SQL structured query language

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

Beispiel zur referentiellen Integrität

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

SQL Performance - Tips Do's & Don'ts

Oracle 10g Einführung

Das SQL-Schlüsselwort ALL entspricht dem Allquantor der Prädikatenlogik

Universität Augsburg, Institut für Informatik WS 2008/2009 Prof. Dr. W. Kießling 23. Nov Dr. A. Huhn, M. Endres, T. Preisinger Lösungsblatt 5

3. Stored Procedures und PL/SQL

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Datenbanksysteme I. Klausur zum Praktikum. Mehrere Professoren prüfen mit genau einem Beisitzer genau einen Studenten.

Transkript:

Kapitel 11 Dr. Jérôme Kunegis Datenintegrität, Views und Zugriffsrechte WeST Web Science & Technologien

Lernziele Verankerung von Integritätsregeln in DB effektivere Integritätssicherung einfachere Anwendungsprogrammierung Durch: Integritätsbedingungen Constraints und Assertions Triggers Views Zugriffskontrolle

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

Integritätsbedingungen: Beispiele Statische Bedingungen: Jeder Student hat eine Matrikelnummer Alle Noten liegen zwischen 1 und 5 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" wechselt nur nach "bestanden" oder "nicht bestanden" Status "bestanden" kann nicht mehr geändert werden

Ausdrucksmittel zur Spezifikation von Integritätsbedingungen Constraints Assertions Triggers nur statische Integritätsbedingungen

Syntax von Constraints und Assertions CREATE TABLE tablename ( { colname datatype [DEFAULT ] [{ colconstraint }] } [{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} ]

Semantik von Constraints und Assertions Semantik von CHECK (searchcond) mit sql2trc[searchcond] = F(t 1,..., t n ) mit freien Variablen t 1,..., t n : t 1... t n ( ( t 1 R 1... t n R n ) F(t 1,..., t n ) ) I j Semantik der Datenbank aus logischer Sicht: H I 1... I m mit elementarer Formel (Fakten) H und Integritätsbed. I 1,..., I m Mögliche Implementierung: 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

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

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 dü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

Constraints: Beispiel (2) Die Constraints der Relation 'Studenten' in der entsprechenden SQL-Anweisung: 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) )

Constraints: Beispiel (2) Hinweis: "attributspezifische" Constraints können sich nur auf das einzelne Attribut 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 );

Constraints: Beispiel (3) 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) ); ALTER TABLE Studenten DROP CONSTRAINT SemCheck;

Constraints: Beispiel (4) CREATE TABLE Studenten ( MatrNr integer, VersNr integer, Name varchar(30), Semester integer, PRIMARY KEY (MatrNr), CONSTRAINTs1 CHECK (Name IS NOT NULL), CONSTRAINT s2 UNIQUE (VersNr), CONSTRAINTs3 CHECK (Semester IS NOT NULL), CONSTRAINTs4 CHECK (Semester BETWEEN 1 AND 13) ); ALTER TABLE Studenten DROP CONSTRAINT s4; ALTER TABLE Studenten ADD CONSTRAINT s4 CHECK (Semester BETWEEN 1 AND 11);

Constraints: Beispiel (5) CREATE TABLE Studenten ( MatrNr integer PRIMARY KEY, Name varchar(30) NOT NULL, 13)); Semester integer NOT NULL CHECK (Semester BETWEEN 1 AND CREATE TABLE Professoren ( PersNr integer PRIMARY KEY, Name varchar(30) NOT NULL, Rang character(2) CHECK (Rang IN ('C2', 'C3', 'C4')), Raum integer UNIQUE );

Assertions: Beispiel CREATE TABLE Professoren ( ) CREATE TABLE Studenten ( ) "Professoren sind keine Studenten": CREATE ASSERTION ProfNotStudent CHECK (NOT EXISTS ( SELECT AusweisNr FROM Professoren INTERSECT SELECT AusweisNr FROM Studenten));

Referentielle Integrität: Motivation Fremdschlüssel verweisen auf Tupel einer Relation z.b. Vorlesungen.gelesenVon verweist auf Tupel in Professoren Referentielle Integrität Fremdschlüssel müssen auf existierende Tupel verweisen oder NULL enthalten

Einhaltung referentieller Integrität Originalzustand S RefKey R MyKey x 1 x 1 x 2 x 2 Mögliche Änderungsoperationen: UPDATE R DELETE FROM R ; SET MyKey = x 5 WHERE MyKey = x 1 ; WHERE MyKey = x 1

Kaskadieren S R S R RefKey MyKey RefKey MyKey x 5 x 5 x 2 x 2 x 2 x 2 CREATE TABLE S (..., RefKey integer REFERENCES R ON UPDATE CASCADE ); CREATE TABLE S (..., RefKey integer REFERENCES R CASCADE ); ON DELETE

Auf NULL bzw. DEFAULT-Wert setzen S R S R RefKey MyKey RefKey MyKey NULL x 5 NULL x 2 x 2 x 2 x 2 CREATE TABLE S CREATE TABLE S (..., (..., RefKey integer REFERENCES R ON UPDATE SET NULL ); RefKey integer REFERENCES R NULL ); ON DELETE SET

Referentielle Integrität in SQL: Motivation CREATE TABLE R ( MyKey integer PRIMARY KEY, ); CREATE TABLE S (..., RefKey integer REFERENCES R (MyKey) );

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=null t.am=null) ( t 1 t m (t 1 R1 t m Rm t 1.B1=t.A1... t m.bm=t.am)) ) ) Reaktion bei Integritätsverletzung: Zurückweisen 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

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

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 nicht von allen Datenbank- Implementierungen unterstützt. (Bei Oracle z.b. nur manche Tabellen-Typen!)

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

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

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;

Datenbank-Trigger: Beispiel (3) "keine Degradierung von Professoren" in Oracle Syntax 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' end if; if :new.rang is NULL then :new.rang := :old.rang; end if; END;

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

Views (Sichten, Virtuelle Relationen) Sicht 1 (Verwaltung)... Sicht k (Bibliothek) Logische Ebene Physische Ebene Ziel: simplifizieren Integritätsssicherung, Anfragen und Schema-Änderungen

Views (Sichten, Virtuelle Relationen) Grobsyntax: CREATE VIEW view-name [ ( column {, column } ) ] AS select-block [ WITH CHECK OPTION ] Für CREATE VIEW MyView AS viewquery ist sql2ra [SELECT A1,, Am FROM TAB1,, TABk, MyView WHERE F] = π[a1,..., Am] ( sql2ra [F] (TAB1 TABk sql2ra[viewquery]))

Sichten: Verwendung für den Datenschutz (ausblenden gewisser Attribute) CREATE VIEW prüfensicht as SELECT MatrNr, VorlNr, PersNr FROM prüfen; statistische Sicht CREATE VIEW PrüfGüte(Name, GüteGrad) 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);

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

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

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 SELECT * FROM Angestellte a, AssiDaten d WHERE a.persnr=d.persnr; Untertypen als Views

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 (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) (2) CREATE VIEW Angestellte AS (SELECT PersNr, Name FROM Professoren) UNION (SELECT PersNr, Name FROM Assistenten) UNION (SELECT PersNr, Name FROM AndereAngestellte); Obertyp als View

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, CONCAT(Vorname, ' ', Nachname), Rang, Raum FROM ProfessorenDaten

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

Änderbarkeit von Sichten in SQL nur eine Basisrelation Schlüssel muss vorhanden sein keine Aggregatfunktionen, Gruppierung und Duplikateliminierung alle Sichten theoretisch änderbare Sichten in SQL änderbare Sichten

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 v.titel, v.sws, p.name FROM Vorlesungen v, Professoren p WHERE v.gelesenvon = p.persnr; INSERT INTO VorlesungenSicht VALUES ('Statistik', 4, 'Müller');

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

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

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 ]

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

Zugriffskontrolle Beispiele (1) Meier bekommt das Recht, Inhalte der Relation Studenten zu selektieren GRANT SELECT ON Studenten TO Meier Meier bekommt das Recht, Inhalte der Relation Studenten zu selektieren 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.

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;

Zugriffskontrolle Beispiele (3) Alice: Eigentümer von AliceTable. Alice: GRANT SELECT ON AliceTable TO Bob WITH GRANT OPTION; Bob: GRANT SELECT ON AliceTable TO Charlie WITH GRANT OPTION; Alice: REVOKE SELECT ON AliceTable FROM Bob; Charlie: GRANT SELECT ON AliceTable TO Bob; NICHT möglich! REVOKE widerruft die Rechte von Bob und Charlie transitiv