13. Sichten und Zugriffskontrolle ■ Sichtenkonzept ■ Änderungen auf Sichten ■ Rechtevergabe in Datenbanksystemen ■ Autorisierung und Authentifikation ■ Statistische Datenbanken Sichten Sichten: virtuelle Relationen (bzw virtuelle Datenbankobjekte in anderen Datenmodellen) (englisch view) ■ Sichten sind externe DB-Schemata folgend der 3-Ebenen-Schemaarchitektur ■ Sichtdefinition ◆ Relationenschema (implizit oder explizit) ◆ Berechnungsvorschrift für virtuelle Relation, etwa SQL-Anfrage VL Datenbanken I – 13–1 Sichten II ■ ■ VL Datenbanken I – 13–2 Drei-Ebenen-Schema-Architektur Vorteile ◆ Vereinfachung von Anfragen ◆ Strukturierung der Datenbank ◆ logische Datenunabhängigkeit (Sichten stabil bei Änderungen der Datenbankstruktur) ◆ Beschränkung von Zugriffen (Datenschutz) externes Schema 1 ... externes Schema N konzeptuelles Schema Probleme ◆ automatische Anfragetransformation ◆ Durchführung von Änderungen auf Sichten internes Schema VL Datenbanken I – 13–3 VL Datenbanken I – 13–4 Definition von Sichten in SQL Definition einer Sicht Angegeben werden muß ■ Relationenschema (explizit, implizit aus Ergebnistyp der Anfrage) ■ Berechnungsvorschrift (Anfrage) für virtuelle Relation create view SichtName [ SchemaDeklaration ] as SQLAnfrage [ with check option ] VL Datenbanken I – 13–5 Einsatz von Sichten am Beispiel Vorteile von Sichten ■ Vereinfachung von Anfragen ■ Strukturierung der Datenbankbeschreibung ■ logische Datenunabhängigkeit: Stabilität der Anwenderschnittstelle ■ Datensicherheit / Datenschutz VL Datenbanken I – 13–6 Prüf( Studienfach, Fach, Student, Prüfer, Datum, Note) 1. Fakultät für Informatik sieht nur die Daten der Informatikstudenten 2. Prüfungsamt sieht alle Daten 3. Jeder Student darf seine eigenen Daten sehen (aber nicht ändern) 4. Kommission für die Vergabe von Promotionsstipendien darf von Studenten die Durchschnittsnote sehen 5. Dekan darf statistische Daten über die Absolventen des letzten Jahrgangs lesen 6. Sekretariate dürfen die Prüfungsdaten der zugehörigen Professoren einsehen VL Datenbanken I – 13–7 VL Datenbanken I – 13–8 Problembereiche bei Sichten ■ automatische Anfragetransformation ■ Durchführung von Änderungen auf Sichten Kriterien für Änderungen auf Sichten ■ Effektkonformität Benutzer sieht Effekt als wäre die Änderung auf der Sichtrelation direkt ausgeführt worden ■ Minimalität Basisdatenbank sollte nur minimal geändert werden, um den erwähnten Effekt zu erhalten ■ Konsistenzerhaltung Änderung einer Sicht darf zu keinen Integritätsverletzungen der Basisdatenbank führen ■ Respektierung des Datenschutzes Wird die Sicht aus Datenschutzgründen eingeführt, darf der bewußt ausgeblendete Teil der Basisdatenbank von Änderungen der Sicht nicht betroffen werden VL Datenbanken I – 13–9 Beispielszenario im Relationenmodell MGA(Mitarbeiter, Gehalt, Abteilung) AL(Abteilung, Leiter) ■ ■ MGA speichert Daten über Zugehörigkeit von Mitarbeitern zu Abteilungen und deren jeweiliges Gehalt AL gibt für jede Abteilung den Abteilungsleiter an VL Datenbanken I – 13–10 Projektionssicht MA := πMitarbeiter,Abteilung (MGA) In SQL mit create view-Anweisung: create view MA as select Mitarbeiter, Abteilung from MGA Änderungsanweisung für die Sicht MA: insert into MA values (’Zuse’, ’Info’) Korrespondierende Anweisung auf der Basisrelation MGA: insert into MGA values (’Zuse’, null, ’Info’) → Problem der Konsistenzerhaltung falls Gehalt als not null deklariert! VL Datenbanken I – 13–11 VL Datenbanken I – 13–12 Kontrolle der Tupelmigration Selektionssichten create view MG as select Mitarbeiter, Gehalt from MGA where Gehalt > 20 with check option MG := σGehalt>20 (πMitarbeiter,Gehalt (MGA)) create view MG as select Mitarbeiter, Gehalt from MGA where Gehalt > 20 Tupelmigration: Ein Tupel MGA(0 Zuse0 , 25,0 Info0 ), wird aus der Sicht „‘herausbewegt“’: update MG set Gehalt = 15 where Mitarbeiter = ’Zuse’ VL Datenbanken I – 13–13 VL Datenbanken I – 13–14 Verbundsichten (II) Verbundsichten Änderung wird transformiert zu MGAL := MGA ./ AL In SQL: insert into MGA values (’Turing’, 30, ’Info’) plus create view MGAL as select Mitarbeiter, Gehalt, MGA.Abteilung, Leiter from MGA, AL where MGA.Abteilung = AL.Abteilung 1. Einfügeanweisung auf AL: insert into AL values (’Info’,’Zuse’) 2. oder alternativ: Änderungsoperationen in der Regel nicht eindeutig übersetzbar: update AL set Abteilung = ’Info’ where Leiter = ’Zuse’ ■ insert into MGAL values (’Turing’, 30, ’Info’, ’Zuse’) ■ VL Datenbanken I – 13–15 besser bzgl. Minimalitätsforderung widerspricht aber Effektkonformität! VL Datenbanken I – 13–16 Aggregierungssichten Klassifikation der Problembereiche create view AS (Abteilung, SummeGehalt) as select Abteilung, sum(Gehalt) from MGA group by Abteilung 1. Verletzung der Schemadefinition (z.B. Einfügen von Nullwerten bei Projektionssichten) 2. Datenschutz: Seiteneffekte auf nicht-sichtbaren Teil der Datenbank vermeiden (Tupelmigration, Selektionssichten) 3. nicht immer eindeutige Transformation: Auswahlproblem Folgende Änderung ist nicht eindeutig umsetzbar: 4. Aggregierungssichten (u.a.): keine sinnvolle Transformation möglich update AS set SummeGehalt = SummeGehalt + 1000 where Abteilung = ’Info’ 5. elementare Sichtänderung soll genau einer atomaren Änderung auf Basisrelation entsprechen: 1:1-Beziehung zwischen Sichttupeln und Tupeln der Basisrelation (kein Herausprojizieren von Schlüsseln) VL Datenbanken I – 13–17 Behandlung von Sichten in SQL VL Datenbanken I – 13–18 Einschränkungen für Sichtänderungen Aktueller Standard SQL-92 ■ Integritätsverletzende Sichtänderungen nicht erlaubt ■ datenschutzverletzende Sichtänderungen: Benutzerkontrolle (with check option) ■ Sichten mit nicht-eindeutiger Transformation: Sicht nicht änderbar (SQL-92 restriktiver als notwendig) VL Datenbanken I – 13–19 ■ änderbar nur Selektions- und Projektionssichten (Verbund und Mengenoperationen nicht erlaubt) ■ 1:1-Zuordnung von Sichttupeln zu Basistupeln: kein distinct in Projektionssichten ■ Arithmetik und Aggregatfunktionen im select-Teil sind verboten ■ genau eine Referenz auf einen Relationsnamen im from-Teil erlaubt (auch kein Selbstverbund) ■ keine Unteranfragen mit “Selbstbezug” im where-Teil erlaubt (Relationsname im obersten SFW-Block nicht in from-Teilen von Unteranfragen verwenden) ■ group by und having verboten VL Datenbanken I – 13–20 Auswertung von Anfragen an Sichten ■ select: Sichtattribute evtl. umbenennen bzw. durch Berechnungsterm ersetzen ■ from: Namen der Originalrelationen ■ konjunktive Verknüpfung der where-Klauseln von Sichtdefinition und Anfrage (evtl. Umbenennungen) Probleme bei Aggregierungssichten create view DS (Abteilung, GehaltsSumme) as select Abteilung, sum(Gehalt) from MGA group by Abteilung Anfrage: Abteilungen mit hohen Gehaltsausgaben select Abteilung from DS where GehaltsSumme > 500 VL Datenbanken I – 13–21 Probleme bei Aggregierungssichten (II) Nach syntaktischer Transformation: select Abteilung from MGA where sum(Gehalt) > 500 group by Abteilung VL Datenbanken I – 13–22 Probleme bei Aggregierungssichten (III) select avg (GehaltsSumme) from DS Anfrage müßte wie folgt transformiert werden: Keine syntaktische korrekte SQL-Anfrage! Korrekt wäre: select Abteilung from MGA group by Abteilung having sum(Gehalt) > 500 VL Datenbanken I – 13–23 select avg(sum (Gehalt)) from MGA group by Abteilung Aber: Geschachtelte Aggregatfunktionen sind in SQL nicht erlaubt! VL Datenbanken I – 13–24 Rechtevergabe in Datenbanksystemen ■ Zugriffsrechte (AutorisierungsID, DB-Ausschnitt, Operation) ■ AutorisierungsID ist interne Kennung eines „‘Datenbankbenutzers“’ ■ Datenbank-Ausschnitte: Relationen und Sichten ■ DB-Operationen: Lesens, Einfügen, Ändern, Löschen Rechtevergabe in SQL grant <Rechte> on <Tabelle> to <BenutzerListe> [with grant option] VL Datenbanken I – 13–25 Rechtevergabe in SQL (II) VL Datenbanken I – 13–26 Autorisierung für public Erläuterungen: ■ In <Rechte>-Liste: all bzw. Langform all privileges oder Liste aus select, insert, update, delete ■ Hinter on: Relationen- oder Sichtname ■ Hinter to: Autorisierungsidentifikatoren (auch public, group) ■ spezielles Recht: Recht auf die Weitergabe von Rechten (with grant option) VL Datenbanken I – 13–27 create view MeineAufträge as select * from AUFTRAG where KName = user; grant select, insert on MeineAufträge to public; „Jeder Benutzer kann seine Aufträge sehen und neue Aufträge einfügen (aber nicht löschen!).“ VL Datenbanken I – 13–28 Authentifikation und Autorisierung Zurücknahme von Rechten Nachweis der Identität von Benutzern: revoke <Rechte> on <Tabelle> from <BenutzerListe> [restrict | cascade ] ■ ■ restrict: Falls Recht bereits an Dritte weitergegeben: Abbruch von revoke cascade: Rücknahme des Rechts mittels revoke an alle Benutzer propagiert, die es von diesem Benutzer mit grant erhalten haben ■ Was der Benutzer weiß: Paßwörter, PINs, Geburtsdatum der Mutter, . . . ■ Was der Benutzer besitzt: etwa Scheckkarte oder Schlüssel ■ Was der Benutzer selbst hat: Fingerabdrücke, Stimme, ... VL Datenbanken I – 13–29 VL Datenbanken I – 13–30 Statistische Datenbanken: Beispiel Statistische Datenbanken ■ Einzeleinträge unterliegen Datenschutz, statistische Informationen (aggregierte Werte) ■ Zugriffsüberwachung muß Zugriff auf Daten über Einzeleinträge verhindern! ■ Bsp.: Benutzer X darf Daten über Kontoinhaber sowie statistische Daten wie Kontosummen sehen select count (∗) from Konto where Ort = ‘Teterow’ nur ein Treffer ; dann Kontoinhaber bestimmen: select Name from Konto where Ort = ‘Teterow’ erlaubte Anfrage liefert Einzelergebnis: select sum(Kontostand) from Konto where Ort = ‘Teterow’ Regel: in Aggregation müssen mindestens n Tupel eingehen VL Datenbanken I – 13–31 VL Datenbanken I – 13–32 Statistische Datenbanken (II) ■ Statistische Datenbanken (III) Person X ist selbst Kontoinhaber, will Kontostand von Y herausfinden ■ X weiß, daß Y nicht in Magdeburg lebt, hat abgefragt, daß in Magdeburg mehr als n Kontoinhaber leben, daher erlaubt: select sum(Kontostand) from Konto where Name = :X or Ort = ‘Magdeburg’ select sum(Kontostand) from Konto where Name = :Y or Ort = ‘Magdeburg’ VL Datenbanken I – 13–33 Statistische Anfragen sollten nicht erlaubt werden, die paarweise einen Durchschnitt von mehr als m vorgegebenen Tupeln betreffen ■ Ergebnisgröße n ■ Größe der Überlappung der Ergebnismengen m ■ Sind nur Ergebnisse von Aggregatfunktionen erlaubt, dann benötigt eine Person 1 + (n − 2)/m Anfragen, um einen einzelnen Attributwert zu ermitteln VL Datenbanken I – 13–34