Herbstsemester 2013 CS261 Web Data Management Kapitel DB-5: Datenintegrität H. Schuldt Semantische Datenintegrität … Ziel der semantischen Datenintegrität: • Die Datenbank soll zu jedem Zeitpunkt die Zusammenhänge und Regeln der realen (Geschäfts-) Welt so präzise wie möglich widerspiegeln • Die Gewährleistung dieser Datenintegrität soll aus den Anwendungsprogrammen herausgelöst und durch das Datenbanksystem selbst übernommen werden T effektivere Kontrolle der Integrität T einfachere Anwendungsprogrammierung • Unterstützung der semantischen Datenintegrität in SQL – Wertebereichsbeschränkungen (durch Angabe einer Domäne) – Constraints (Column Constraints und Table Constraints) – Assertions – Referentielle Integrität – Trigger – Views HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-2 1 Typen von Integritätsbedingungen Man unterscheidet folgende Arten von semantischen Integritätsbedingungen: • Statische Integritätsbedingungen (Prädikate über dem Datenbankzustand). Diese Integritätsbedingungen müssen zu jedem Zeitpunkt eingehalten werden. – datenmodellinhärente Integritätsbedingungen • Primärschlüsselbedingung • Fremdschlüsselbedingung – anwendungsspezifische Integritätsbedingungen • für ein Attribut eines Tupels • für ein Tupel • für mehrere Tupel einer Relation • für mehrere Relationen • Dynamische Integritätsbedingungen (Prädikate über Zustandsänderungen). Die dynamischen Integritätsbedingungen müssen am Ende einer Zustandsänderung wieder hergestellt sein. Die logische Widerspruchsfreiheit der spezifizierten Integritätsbedingungen muss (vom Datenbankdesigner) sichergestellt werden! HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-3 … Semantische Datenintegrität Die Prüfung de Integritätsbedingungen kann zu zwei unterschiedlichen Zeitpunkten erfolgen: – am Ende einer Datenbankoperation (SQL-Anweisung) – am Ende einer Transaktion (beim COMMIT WORK), also nach einer Folge von zusammengehörenden Datenbankoperationen. Damit können Integritätsbedingungen temporär verletzt werden. Bei Integritätsverletzungen sind folgende Reaktionen möglich: – Nichtausführung bzw. Rückgängigmachen der Datenbankoperation – Abbruch der Transaktion (implizites ROLLBACK WORK), also einer Folge von Datenbankoperationen – Ausführung von Folgeänderungen zur Wiederherstellung der Integrität HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-4 2 Beispiele für statische Integritätsbedingungen 1. Der Rabatt eines Kunden darf nicht über 50 Prozent liegen. 2. Der Rabatt eines ausländischen Kunden darf nicht über 30 Prozent liegen. (Annahme: Es gibt ein zusätzliches Kundenattribut „Land“ in der Kundenrelation) 3. Der durchschnittliche Rabatt aller Kunden darf 30 Prozent nicht überschreiten. 4. Der Gesamtwert aller Produkte im selben Lager darf 1 Mio. CHF nicht überschreiten. 5. Es muss mindestens ein Produkt geben. 6. Die Rechnungssumme einer Bestellung ergibt sich aus dem Produkt von Preis und bestellter Menge des bestellten Produkts abzüglich des Kundenrabatts. 7. Der Saldo eines Kunden ist die (negative) Summe der Rechnungssummen aller noch nicht bezahlten Bestellungen des Kunden. HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-5 Beispiele für dynamische Integritätsbedingungen 8. Der Rabatt eines Kunden darf nie reduziert werden. 9. Von Kunden, deren Saldo unter -100‘000.- CHF liegt, werden keine Bestellungen mehr angenommen. 10. Der Status einer neuen Bestellung darf sich nur in „geliefert“ ändern, der Status einer gelieferten Bestellung nur in „bezahlt“. Der Status einer bezahlten Bestellung darf sich nie mehr ändern. 11. Der Rabatt eines Kunden darf innerhalb eines Jahres um maximal 10 Prozent angehoben werden. HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-6 3 Integritätsbedingungen mit CREATE TABLE Statement • Integritätsbedingungen können zusammen mit einem CREATE TABLE Statement entweder durch ein Column Constraint (für einzelne Attribute) und/oder ein Table Constraint (für die gesamte Relation) angegeben werden – Column Constraints beziehen sich auf einzelne Attribute – Table Constraints können mehrere Attribute derselben Relation bzw. eine komplette Relationen umfassen • Zulässige Integritätsbedingungen sind alle in der WHERE-Klausel der SELECTAnweisung zulässigen Suchprädikate – Die Integritätsbedingung wird also durch die Ausführung einer Query überprüft • Bedingungen beim CREATE TABLE gelten für leere Relationen immer als erfüllt HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-7 Integritätsbedingungen mit CREATE TABLE Statement SQL-Syntaxdiagramme (Ausschnitt; Erweiterung zu 4-7) column_constraint = [CONSTRAINT constraint_name] [NOT NULL] [PRIMARY KEY | UNIQUE] [REFERENCES [user “.”] table [ “(“ column “)” ]] [CHECK “(“ condition “)” ] table_constraint = [CONSTRAINT constraint_name] [ (PRIMARY KEY | UNIQUE) “(“ column {“,” column} “)” ] [ FOREIGN KEY “(“ column {“,” column} “)” REFERENCES [user “.”] table [ “(“ column {“,” column} “)” ] [CHECK “(“ condition “)” ] Die vollständigen SQL-Syntaxdiagramme sind auf der Vorlesungswebseite verfügbar. HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-8 4 Integritätsbedingungen mit CREATE TABLE Statement Beispiele (Bedingungen 1, 2, 3): CREATE TABLE Kunden ( KNr Integer Primary Key, Name Varchar2(30), Stadt Varchar2(30), Land Varchar2(2), Saldo Float, Rabatt Float CONSTRAINT Rabattbedingung CHECK (Rabatt BETWEEN 0.0 AND 0.5), CONSTRAINT Auslandsrabatt CHECK (Land = 'CH' OR Rabatt <= 0.3), CONSTRAINT Durchschnittsrabatt CHECK (0.3 >= (SELECT AVG(Rabatt) FROM Kunden)) ) HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-9 Integritätsbedingungen mit CREATE TABLE Statement Bedingung 4 (Der Gesamtwert aller Produkte im selben Lager darf 1 Mio. SFr. nicht überschreiten): CREATE TABLE Produkte ( ... CONSTRAINT Lagerwertbedingung CHECK HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-10 5 Assertions … • Assertions (Zusicherungen) sind für Integritätsbedingungen vorgesehen, die relationenübergreifend sind, d.h. die mehrere Relationen betreffen. • Assertions werden –im Gegensatz zu den Table_Constraints– nicht im Zusammenhang mit der Tabellendefinition erstellt sondern sind vielmehr eigenständige Schemaelemente • Zulässige (Such-)Bedingungen (Search_Condition) innerhalb einer Assertion sind dieselben, die auch innerhalb einer WHERE-Klausel erlaubt sind (also eine Bedingung, die entweder zu true oder false ausgewertet werden kann) • Mit der Deferrability wird der Zeitpunkt der Prüfung festgelegt Syntaxdiagramm für die Definition von Assertions AssertionDef = CREATE ASSERTION Assertion CHECK "("Search_Condition ")" [ Deferrability ] Deferrability = [ NOT ] DEFERRABLE | INITIALLY ( DEFFERRED | IMMEDIATE ) HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-11 … Assertions … Mögliche Zeitpunkte für die Prüfung der Integritätsbedingung von Assertions (Deferrability) – am Ende jeder SQL-Anweisung (bei DEFERRABLE und INITIALLY IMMEDIATE) und bei NOT DEFERRABLE – oder am Ende der Transaktion (bei DEFFERABLE und INITIALLY DEFERRED), – oder explizit durch den Programmierer innerhalb einer Transaktion mittels SET CONSTRAINTS constraint-name IMMEDIATE bzw. ..... DEFFERRED – Defaults sind NOT DEFERRABLE bzw. INITIALLY IMMEDIATE bei DEFERRABLE Reaktion bei Integritätsverletzung: – Die SQL-Anweisung wird nicht ausgeführt bzw. rückgängig gemacht; – bei verzögerter Prüfung wird die gesamte Transaktion zurückgesetzt. – Eine flexiblere Reaktion ist nur für Verletzungen der T referentiellen Integrität vorgesehen. HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-12 6 Einschub Transaktionsprogrammierung Kurzer Vorgriff auf Aspekte der Transaktionsverwaltung BOT: (Begin of Transaction) C1, C2 seien NOT Deferrable, C3 sei Deferrable Initially Immediate, C4, C5, C6 seien Contraints mit der Angabe Deferrable Initially Deferred SQL-DML-1; SET CONSTRAINTS C4 IMMEDIATE; SET CONSTRAINTS C3 DEFERRED; SQL-DML-2; SQL-DML-3; EOT: End-of-Transaction RBT: Roll-Back-Transaction t HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-13 … Assertions … Bedingung 5 (Es muss mindestens ein Produkt geben): CREATE ASSERTION Produktexistenzbedingung CHECK (EXISTS (SELECT * FROM Produkte) ) DEFERRABLE INITIALLY DEFERRED Bedingung 6 (Die Rechnungssumme einer Bestellung ergibt sich aus dem Produkt von Preis und bestellter Menge des bestellten Produkts abzüglich des Kundenrabatts): CREATE ASSERTION Rechnungssummenbedingung CHECK ( NOT EXISTS ( SELECT * FROM Bestellungen B, Produkte P, Kunden K WHERE B.PNr = P.PNr AND B.KNr = K.KNr AND B.Status = ‘neu’ AND B.Summe <> B.Menge * P.Preis * (1.0 - K.Rabatt))) DEFERRABLE INITIALLY DEFERRED HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-14 7 … Assertions Bedingung 7 (Der Saldo eines Kunden ist die (negative) Summe der Rechnungssummen aller noch nicht bezahlten Bestellungen des Kunden): CREATE ASSERTION Saldobedingung HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-15 Referentielle Integrität … Zusammen mit der Definition von Fremdschlüsselbeziehungen lässt sich auch angeben, wie mit die Reaktion auf Verletzungen der referentiellen Integrität aussehen soll: ReferentialIntegrityConstraintDef = [ CONSTRAINT name ] FOREIGN KEY "(" ColumnList ")" REFERENCES Table [ "(" ColumnList ")" ] [ ON DELETE Action ] [ ON UPDATE Action ] Deferrability Action = NO ACTION | CASCADE | SET NULL | SET DEFAULT . Bedeutung der „Action“: • NO ACTION: Zurückweisung der Löschung/Änderung (Default). Es wird also keine Aktion mit dauerhaftem Ergebnis durchgeführt • CASCADE: Löschen bzw. Ändern aller Tupel, die den Primärschlüssel des gelöschten bzw. geänderten Tupels referenzieren • SET NULL bzw. SET DEFAULT: Setzen des Fremdschlüssels in allen Tupeln, die den Primärschlüssel des gelöschten bzw. geänderten Tupels referenzieren, auf NULL bzw. auf den vereinbarten Default-Wert. HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-16 8 … Referentielle Integrität … Gegeben sei das etwas modifizierte Beispielschema: Kunden Produkte Bestellungen (Fremdschlüssel: KNr) KNr … PNr … 1 … 1 … BestNr 1001 Monat 10 Tag 04 KNr 1 Summe 3500,00 Status bezahlt 2 … 2 … 1002 11 18 2 1800,00 bezahlt … … … … 1003 11 21 1 9000,00 … … … … … bezahlt … CREATE TABLE Bestellungen ( ... , FOREIGN KEY KNr REFERENCES Kunden (KNr) ON DELETE SET NULL ) Was passiert nach dem Löschen von Kunde 1? Bestellungen 1001 und 1003 erhalten den Nullwert als KNr KNr … PNr … BestNr Monat Tag 2 … 1 … 1001 10 04 null 3500,00 … … 2 … 1002 11 18 2 1800,00 bezahlt … … 1003 11 21 null 9000,00 bezahlt … … … … … HS 2013 KNr Summe Web Data Management (CS261) – Datenintegrität Status bezahlt … DB-5-17 … Referentielle Integrität … Bestellposten (Fremdschlüssel: PNr) BestNr PNr Menge 1001 1 4 1002 2 18 1003 1 100 1003 2 21 … … … CREATE TABLE Bestellposten ( ... , FOREIGN KEY PNr REFERENCES Produkte (PNr) ON DELETE CASCADE, FOREIGN KEY BestNr REFERENCES Bestellungen (BestNr) ON DELETE NO ACTION ) Was passiert nach dem Löschen von Produkt 1? Die Bestellposten für Produkt 1 werden gelöscht. PNr … BestNr 2 … 1002 PNr 2 Menge 18 … … 1003 2 21 … … … Was passiert nach dem Löschen von Bestellung 1002? Keine Änderung, die Löschoperation wird zurückgewiesen. HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-18 9 … Referentielle Integrität Auch Fremdschlüsselbeziehungen lassen sich verzögert überprüfen. Die Angabe der Deferrability (Syntax und Semantik) ist dieselbe wie bei den Assertions. Deferrability = [ NOT ] DEFERRABLE | INITIALLY ( DEFFERRED | IMMEDIATE ) HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-19 Trigger … Kernidee: • Es wird eine Folge von SQL-Anweisungen (ACTION) definiert, die vor oder nach einer bestimmten Art von Änderungsoperationen (EVENT) und bei Erfüllung einer spezifizierten Bedingung (CONDITION) automatisch ausgeführt wird. • Trigger kombinieren die auszuführende Aktion mit Event und Condition. Das Ausführen der SQL-Anweisungen eines Triggers wird auch als „Feuern“ des Triggers bezeichnet. • Vorteile von Triggern gegenüber der rein deklarativen Spezifikation von Integritätsbedingungen: – Es wird eine flexible Reaktion auf Integritätsverletzungen ermöglicht (Aktionen um Integritätsverletzungen zu kompensieren) – Es ist eine sehr spezifische Wahl der Überprüfungszeitpunkte möglich HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-20 10 … Trigger … Syntax der Triggerdefinition TriggerDef = CREATE TRIGGER Trigger ( BEFORE | AFTER ) ( INSERT | DELETE | UPDATE [ OF ColumnList ] ) ON Table [ REFERENCING OLD AS CorrelationVar NEW AS CorrelationVar ] [ WHEN "(" SearchCondition ")" ] "(" StatementSequence ")" . HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-21 … Trigger … Beispiel: Bedingung 7 (Der Saldo eines Kunden ist die (negative) Summe der Rechnungssummen aller noch nicht bezahlten Bestellungen des Kunden) … CREATE TRIGGER Saldoeintrag AFTER INSERT ON Bestellungen WHEN ( Status = 'neu') ( UPDATE Kunden SET Saldo = Saldo - Summe WHERE Kunden.KNr = Bestellungen.KNr ) … CREATE TRIGGER Saldoausgleich AFTER UPDATE OF Status ON Bestellungen WHEN ( Status = 'bezahlt' ) ( UPDATE Kunden SET Saldo = Saldo + Summe WHERE Kunden.KNr = Bestellungen.KNr ) HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-22 11 … Trigger … Die Reihenfolge, in der die Trigger „feuern“, ist unter Umständen essentiell. • Die durch einen Trigger ausgelöste Anweisungsfolge kann selbst wieder eine Integritätsverletzung hervorrufen und damit andere (oder auch denselben) Trigger feuern. • Trigger sind ein sehr mächtiges Konzept zur Integritätssicherung – Man kann mit Triggern auch (eingeschränkt) Anwendungsfunktionalität direkt in der Datenbank umsetzen. – Man spricht auch von aktiven Datenbanken. – Die Regeln (Event – Condition – Action) die den aktiven Datenbanken zugrunde liegen werden auch als Produktionsregeln bezeichnet (Kurzform: ECA-Regeln) • Allerdings sind Triggerspezifikationen sind aber auch potentiell sehr fehleranfällig (da die Trigger im Datenbanksystem versteckt sind und man bei einer grossen Anzahl Trigger rasch den Überblick verliert) HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-23 … Trigger … Bedingung 8 (Der Rabatt eines Kunden darf nie reduziert werden): CREATE TRIGGER Rabattmonotonie AFTER UPDATE OF Rabatt ON Kunden REFERENCING OLD AS KOld NEW AS KNew WHEN ( KNew.Rabatt < KOld.Rabatt ) ( ROLLBACK WORK ) Bedingung 9 (Von Kunden, deren Saldo unter -100000 CHF liegt, werden keine Bestellungen mehr angenommen): CREATE TRIGGER Kundensperrung AFTER INSERT ON Bestellungen WHEN ( (SELECT Saldo FROM Kunden WHERE Kunden.KNr = Bestellungen.KNr) < -100000.0 ) ( <Fehlermeldung ausgeben>; ROLLBACK WORK ) HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-24 12 … Trigger Bedingung 10 (Der Status einer neuen Bestellung darf sich nur in "geliefert" ändern, der Status einer gelieferten Bestellung nur in "bezahlt". Der Status einer bezahlten Bestellung darf sich nie mehr ändern): CREATE TRIGGER Lieferung HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-25 Views (Sichten, Virtuelle Relationen) … Idee (eine von mehreren Motivationen für das View-Konzept) • Die Integritätssicherung wird umso einfacher, je weniger abgeleitete Daten explizit gespeichert werden. Solche abgeleiteten Daten (z.B. Saldo) sollen vielmehr nur bei Bedarf berechnet werden. • Um die Formulierung der entsprechenden Anfragen so einfach möglich zu machen, können abgeleitete Daten als "Views" zur Verfügung gestellt werden. • Views erscheinen gegenüber dem SQL-Programmierer praktisch wie gespeicherte Relationen, ohne dass die Tupel der View wirklich gespeichert sind. Grobsyntax zur Definition von Views: CREATE VIEW view-name [ "(" column {"," column} ")" ] AS Query [ WITH CHECK OPTION ] Query = SelectBlock { [UNION | INTERSECTION | EXCEPT] SelectBlock } HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-26 13 … Views … Beispiel für View-Definition (Übersicht über Kunden): CREATE VIEW KundenInfo ( KNr, Name, Umsatz ) AS SELECT Kunden.KNr, Name, SUM(Summe) FROM Kunden, Bestellungen WHERE Kunden.KNr = Bestellungen.KNr GROUP BY KNr, Name Abfrage des Umsatzes: SELECT Umsatz FROM KundenInfo WHERE KNr = 1 HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-27 … Views • Views können generell zur Vereinfachung von Abfragen definiert werden (analog zu Zuweisungen in der Relationenalgebra). Auf Views können wiederum weitere Views definiert werden. Beispiel: CREATE VIEW BestellungsInfo (BestNr, Monat, Tag, KNr, Kundenname, Rabatt, PNr, Produktbez, Menge, Summe, Status) AS SELECT BestNr, Monat, Tag, Kunden.KNr, Name, Rabatt, Produkte.PNr, Bez, Menge, Summe, Status FROM Bestellungen, Kunden, Produkte WHERE Bestellungen.KNr = Kunden.KNr AND Bestellungen.PNr = Produkte.PNr • Die View Bestellungsinfo erlaubt einfache Anfragen über die drei zugrunde liegenden Tabellen lässt sich damit einfache Anfrage, z.B.: SELECT Kundenname FROM BestellungsInfo WHERE Produktbez='Platte' • Es könne auch neue Views definiert werden, die auf einer View aufbauen: CREATE VIEW SuperBestellungsInfo AS SELECT * FROM BestellungsInfo WHERE Summe > 10000.00 HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-28 14 Ausführung von Operationen auf Views • Anfragen auf Views werden DBS-intern direkt durch Substitution in Anfragen auf die gespeicherten Relationen transformiert (bzw. transitiv, wenn eine View-Definition wiederum auf einer View aufbaut) Beispiel (in Relationenalgebra): s[Rabatt > 0.3] (SuperBestellungsInfo) = s[Rabatt > 0.3] (s[Summe > 10000.00] (BestellungsInfo)) = s[Rabatt > 0.3] (s[Summe > 10000.00] (p[BestNr, ...] (Kunden Bestellungen Produkte))) Beispiel (in Pseudo-SQL) SELECT * FROM SuperBestellungsInfo WHERE Rabatt > 0.3 = SELECT * FROM (SELECT * FROM BestellungsInfo WHERE Summe > 10000.00) WHERE Rabatt > 0.3 = SELECT * FROM (SELECT * FROM ( SELECT BestNr, Monat, Tag, Kunden.KNr, Name, Rabatt, Produkte.PNr, Bez, Menge, Summe, Status FROM Bestellungen, Kunden, Produkte WHERE Bestellungen.KNr = Kunden.KNr AND Bestellungen.PNr = Produkte.PNr ) WHERE Summe > 10000.00) WHERE Rabatt > 0.3 HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-29 Änderungen über Views • Änderungen eines Tupels einer View sind nur möglich, wenn sie eindeutig auf ein Tupel einer gespeicherten Relation abgebildet werden können (Gleiches gilt für Einfügen und Löschen). Beispiele: 1. UPDATE BestellungsInfo SET Menge = 10 WHERE BestNr = 5 ist (zumindest theoretisch) erlaubt 2. UPDATE KundenInfo SET Name = 'Baumann' WHERE KNr=1 ist theoretisch zulässig, aber in den meisten DBS nicht erlaubt (wegen Join in View-Definition) 3. UPDATE KundenInfo SET Umsatz = Umsatz + 1000.0 WHERE KNr=1 ist nicht möglich (berechnetes Attribut)! 4. UPDATE BestellungsInfo SET Produktbez = 'Druckerpapier' WHERE PNr=1 ist theoretisch zulässig, aber in den meisten DBS nicht erlaubt! 5. UPDATE BestellungsInfo SET Produktbez = 'Druckerpapier' WHERE BestNr=1 ist theoretisch möglich, aber nicht erlaubt! 6. UPDATE BestellungsInfo SET Produktbez = 'Druckerpapier' WHERE Monat=12 ist nicht erlaubt! HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-30 15 CHECK Option für Views • Einfügung eines Tupels in eine View, das dort nicht sichtbar sein kann bzw. Änderung eines View-Tupels, die dazu führt, dass das Tupel aus der View "verschwindet", können durch Spezifikation der CHECK OPTION verboten werden. • Beispiel: CREATE VIEW SuperKunden AS SELECT * FROM Kunden WHERE Rabatt > 0.3 WITH CHECK OPTION INSERT INTO SuperKunden (KNr, Name, Stadt, Rabatt) VALUES (100, 'Meier', 'Basel', 0.1) wird daher zurückgewiesen (Kunde Meier ist kein „Superkunde“) UPDATE SuperKunden SET Rabatt = Rabatt - 0.05 WHERE KNr = 10 wird eventuell zurückgewiesen HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-31 Views zur Datenunabhängigkeit • Views können auch als Mittel zur Realisierung der Datenunabhängigkeit bei Schema-Änderungen verwendet werden – Das Schema der eigentlichen Relation wird geändert – Für Anwendungen, die noch das alte Schema verwenden, wird eine entsprechende View bereit gestellt • Beispiel: die Relation Kunden wird in zwei Relationen aufgeteilt, weil ein Kunde auch in verschiedenen Städten sein kann: Kundenkonto(KNr, Name, Saldo, Rabatt) Kundenorte(KNr, Stadt) • Anfragen auf die ursprüngliche Relation Kunden können bei Definition der folgenden View wie bisher gestellt werden: CREATE VIEW Kunden (KNr, Name, Stadt, Saldo, Rabatt) AS SELECT K.KNr, Name, Stadt, Saldo, Rabatt FROM Kundenkonto K, Kundenorte O WHERE K.KNr = O.KNr HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-32 16 Wiederholung: Architektur eines DBS • Drei-Ebenen-Architektur zur Realisierung von – physischer – und logischer Datenunabhängigkeit nach ANSI/SPARC (American National Standards Institute / Standards Planning and Requirements Commitee) A1 A2 Ext. Schema1 A3 A4 Ext. Schema2 A5 Anwendungsgruppen Ext. Schema3 Externe Ebene Logische Datenunabhängigkeit Logisches Schema Konzeptionelle (logische) Ebene Physische Datenunabhängigkeit Internes Schema HS 2013 Interne (physische) Ebene Web Data Management (CS261) – Datenintegrität DB-5-33 Datenschutz und Zugriffskontrolle Datenschutz (engl.: data privacy): • Einschränkungen bei der Speicherung und Verarbeitung „kritischer“ Daten, insbesondere personenbezogener Daten (Schutz der Privatsphäre von Personen) Zugriffskontrolle / Autorisation (engl.: data security, authorization): • Verhinderung von unbefugten Zugriffen auf gespeicherte Daten Massnahmen der Zugriffskontrolle 1. Organisatorische Massnahmen (z.B. kontrollierter Zugang zu den Rechnerräumen) 2. Technische Massnahmen (Datenverschlüsselung, etc.) 3. Massnahmen des Betriebssystems (die der Datenbank zugrunde liegenden Dateien bzw. Platten sind nur für das DBS zugreifbar, also z.B. nur vom Account „Oracle“ aus.) 4. Authentifizierung des DB-Benutzers (typischerweise durch Angabe eines Kennworts beim CONNECT) 5. Prüfung der Zugriffsrechte des DB-Benutzers beim Zugriff auf Daten HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-34 17 Prüfung von Zugriffsrechten … • • Die Überprüfung von Zugriffsrechten in Datenbanken basiert zunächst auf der Vergabe von Rechten auf Objekten (zur Ausführung von Operationen) an Subjekte. Die Vergabe von Rechten erfolgt in SQL durch die GRANT-Anweisung. Grobsyntax: GRANT ( ALL | privilege {"," privilege} ) ON ( table | view ) TO ( PUBLIC | user {"," user} ) [ WITH GRANT OPTION ] • Mögliche Rechte zum Zugriff auf relationale Datenbanken sind: – 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 – … HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-35 … Prüfung von Zugriffsrechten … Beispiele: 1. An Benutzer Bob wird das Recht zur Ausführung von SELECT-Anweisungen auf der Relation Bestellungen vergeben. GRANT SELECT ON Bestellungen TO Bob 2. Benutzer Bob erhält das Recht zur Ausführung des Programms Lieferung. GRANT EXECUTE Lieferung TO Bob 3. Das Programm Lieferung erhält das Recht zur Änderung der Relation Bestellungen. GRANT UPDATE Status ON Bestellungen TO Lieferung HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-36 18 … Prüfung von Zugriffsrechten • Zugriffsrechte können durch die Definition von Views noch verfeinert werden (prädikat-orientierte Verfeinerung) CREATE VIEW KundenBS AS SELECT * FROM Kunden WHERE Stadt = 'Basel' Beispiel: • Benutzer Bob hat nur das Recht zum Lesen der Kundendaten der Stadt Basel. GRANT SELECT ON KundenBS TO Bob Die Prädikate zur Verfeinerung der Zugriffsrechte sind also nicht im GrantStatement enthalten sondern in einer entsprechenden View-Definition HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-37 Weitergabe/Rücknahme von Zugriffsrechten … • Für jedes Objekt gibt es genau ein Subjekt, den so genannten Eigentümer (owner), das alle Rechte für das Objekt besitzt. – Das Subjekt bleibt auch bei der Weitergabe von Zugriffsrechten der Eigentümer des Objektes. • Der Empfänger der Rechte kann diese zunächst nicht weitergeben – Ausnahme: Bei Angabe der GRANT OPTION darf der Empfänger eines Rechts dieses selbst wiederum an andere Subjekte weitergeben • Weitergegebene Rechte können mit folgender Anweisung wieder zurück genommen werden REVOKE privilege FROM user Beispiel: REVOKE SELECT ON Bestellungen FROM Bob HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-38 19 … Weitergabe/Rücknahme von Zugriffsrechten Beispiel für transitiv weitergegebene Zugriffsrechte: • Annahme: Benutzerin Alice sei der Eigentümerin der Relation ATable Alice: GRANT SELECT ON ATable TO Bob WITH GRANT OPTION Bob: GRANT SELECT ON ATable TO Carol WITH GRANT OPTION Alice: REVOKE SELECT ON ATable FROM Bob Carol: GRANT SELECT ON ATable TO Bob … ist Bob jetzt noch berechtigt, auf ATable zuzugreifen? • Lösung in relationalen DBMS: REVOKE wirkt transitiv, nimmt also auch die vom Empfänger eines Rechts an Dritte weitergegebenen Rechte wieder zurück. T es wird ein Autorisationsgraph benötigt, um über die transitiven Weitergaben Buch zu führen. HS 2013 Web Data Management (CS261) – Datenintegrität DB-5-39 20