12. Sichten und Zugriffskontrolle
■ Sichtenkonzept
■ Änderungen auf Sichten
■ Rechtevergabe in Datenbanksystemen
■ Autorisierung und Authentifikation
■ Statistische Datenbanken
VL Datenbanken I – 12–1
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 – 12–2
Sichten II
■ Vorteile
◆ Vereinfachung von Anfragen
◆ Strukturierung der Datenbank
◆ logische Datenunabhängigkeit (Sichten stabil bei Änderungen der Datenbankstruktur)
◆ Beschränkung von Zugriffen (Datenschutz)
■ Probleme
◆ automatische Anfragetransformation
◆ Durchführung von Änderungen auf Sichten
Drei-Ebenen-Schema-Architektur
. . . externes Schema N externes Schema 1
internes Schema konzeptuelles Schema
VL Datenbanken I – 12–4
Definition einer Sicht
Angegeben werden muß
■ Relationenschema (explizit, implizit aus Ergebnistyp der Anfrage)
■ Berechnungsvorschrift (Anfrage) für virtuelle Relation
VL Datenbanken I – 12–5
Definition von Sichten in SQL
create view SichtName [ SchemaDeklaration ] as SQLAnfrage
[ with check option ]
VL Datenbanken I – 12–6
Vorteile von Sichten
■ Vereinfachung von Anfragen
■ Strukturierung der Datenbankbeschreibung
■ logische Datenunabhängigkeit:
Stabilität der Anwenderschnittstelle
■ Datensicherheit / Datenschutz
VL Datenbanken I – 12–7
Einsatz von Sichten am Beispiel
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 – 12–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 – 12–10
Beispielszenario im Relationenmodell
MGA(Mitarbeiter, Gehalt, Abteilung) AL(Abteilung, Leiter)
■ MGAspeichert Daten über Zugehörigkeit von
Mitarbeitern zu Abteilungen und deren jeweiliges Gehalt
■ ALgibt für jede Abteilung den Abteilungsleiter an
VL Datenbanken I – 12–11
Projektionssicht
MA:=πMitarbeiter,Abteilung(MGA)
In SQL mit create view-Anweisung:
create view MA as
select Mitarbeiter, Abteilung from MGA
Änderungsanweisung für die SichtMA:
insert into MA values (’Zuse’, ’Info’)
Korrespondierende Anweisung auf der BasisrelationMGA: insert into MGA values (’Zuse’, null, ’Info’)
→Problem der Konsistenzerhaltung fallsGehaltals not null deklariert!
VL Datenbanken I – 12–12
Selektionssichten
MG:=σGehalt>20(πMitarbeiter,Gehalt(MGA)) create view MG as
select Mitarbeiter, Gehalt from MGA
where Gehalt > 20
Tupelmigration: Ein TupelMGA(0Zuse0,25,0Info0),wird aus der Sicht „‘herausbewegt“’:
update MG set Gehalt = 15 where Mitarbeiter = ’Zuse’
VL Datenbanken I – 12–13
Kontrolle der Tupelmigration
create view MG as
select Mitarbeiter, Gehalt from MGA
where Gehalt > 20 with check option
VL Datenbanken I – 12–14
Verbundsichten
MGAL:=MGA./AL In SQL:
create view MGAL as
select Mitarbeiter, Gehalt, MGA.Abteilung, Leiter from MGA, AL
where MGA.Abteilung = AL.Abteilung
Änderungsoperationen in der Regel nicht eindeutig übersetzbar:
insert into MGAL
values (’Turing’, 30, ’Info’, ’Zuse’)
Verbundsichten (II)
Änderung wird transformiert zu
insert into MGA values (’Turing’, 30, ’Info’)
plus
1. Einfügeanweisung aufAL:
insert into AL values (’Info’,’Zuse’) 2. oder alternativ:
update AL set Abteilung = ’Info’
where Leiter = ’Zuse’
■ besser bzgl. Minimalitätsforderung
■ widerspricht aber Effektkonformität!
VL Datenbanken I – 12–16
Aggregierungssichten
create view AS (Abteilung, SummeGehalt) as
select Abteilung, sum(Gehalt) from MGA
group by Abteilung
Folgende Änderung ist nicht eindeutig umsetzbar:
update AS
set SummeGehalt = SummeGehalt + 1000 where Abteilung = ’Info’
VL Datenbanken I – 12–17
Klassifikation der Problembereiche
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 4. Aggregierungssichten (u.a.): keine sinnvolle
Transformation möglich
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 – 12–18
Behandlung von Sichten in SQL
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 – 12–19
Einschränkungen für Sichtänderungen
■ ä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 – 12–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 – 12–22
Probleme bei Aggregierungssichten (II)
Nach syntaktischer Transformation:
select Abteilung from MGA
where sum(Gehalt) > 500 group by Abteilung
Keine syntaktische korrekte SQL-Anfrage! Korrekt wäre:
select Abteilung from MGA
group by Abteilung
having sum(Gehalt) > 500
VL Datenbanken I – 12–23
Probleme bei Aggregierungssichten (III)
select avg (GehaltsSumme) from DS
Anfrage müßte wie folgt transformiert werden:
select avg(sum (Gehalt)) from MGA
group by Abteilung
Aber: Geschachtelte Aggregatfunktionen sind in SQL nicht erlaubt!
VL Datenbanken I – 12–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
VL Datenbanken I – 12–25
Rechtevergabe in SQL
grant <Rechte>
on <Tabelle>
to <BenutzerListe>
[with grant option]
VL Datenbanken I – 12–26
Rechtevergabe in SQL (II)
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)
Autorisierung für public
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 – 12–28
Zurücknahme von Rechten
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
VL Datenbanken I – 12–29
Authentifikation und Autorisierung
Nachweis der Identität von Benutzern:
■ 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 – 12–30
Statistische Datenbanken
■ Einzeleinträge unterliegen Datenschutz, statistische Informationen (aggregierte Werte)
■ Zugriffsüberwachung muß Zugriff auf Daten über Einzeleinträge verhindern!
■ Bsp.: BenutzerXdarf Daten über Kontoinhaber sowie statistische Daten wie Kontosummen sehen
VL Datenbanken I – 12–31
Statistische Datenbanken: Beispiel
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 mindestensnTupel eingehen
VL Datenbanken I – 12–32
Statistische Datenbanken (II)
■ PersonXist selbst Kontoinhaber, will Kontostand vonY herausfinden
■ Xweiß, daßY nicht in Magdeburg lebt, hat abgefragt, daß in Magdeburg mehr alsnKontoinhaber 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’
Statistische Datenbanken (III)
Statistische Anfragen sollten nicht erlaubt werden, die paarweise einen Durchschnitt von mehr alsmvorgegebenen Tupeln betreffen
■ Ergebnisgrößen
■ Größe der Überlappung der Ergebnismengenm
■ Sind nur Ergebnisse von Aggregatfunktionen erlaubt, dann benötigt eine Person1 + (n−2)/mAnfragen, um einen einzelnen Attributwert zu ermitteln
VL Datenbanken I – 12–34