Kapitel 9+10
This commit is contained in:
parent
db3b2f240b
commit
e0fdf429ba
@ -1198,13 +1198,429 @@ Motivation: Die Sprache QBE
|
||||
|
||||
# Transaktionen, Integrität und Trigger
|
||||
## Grundbegriffe
|
||||
Integritätsbedingung (engl. integrity constraint oder assertion): Bedingung für die „Zulässigkeit“ oder „Korrektheit“
|
||||
|
||||
1. Typintegrität
|
||||
- SQL erlaubt Angabe von Wertebereichen zu Attributen
|
||||
- Erlauben oder Verbieten von Nullwerten
|
||||
2. Schlüsselintegrität
|
||||
- Angabe eines Schlüssels für eine Relation
|
||||
3. Referentielle Integrität
|
||||
- die Angabe von Fremdschlüsseln
|
||||
|
||||
## Transaktionsbegriff
|
||||
Beispiel:
|
||||
- Platzreservierung für Flüge gleichzeitig aus vielen Reisebüros → Platz könnte mehrfach verkauft werden, wenn mehrere Reisebüros den Platz als verfügbar identifizieren
|
||||
- überschneidende Kontooperationen einer Bank
|
||||
- statistische Datenbankoperationen → Ergebnisse sind verfälscht, wenn während der Berechnung Daten geändert werden
|
||||
|
||||
> Transaktion: Eine Transaktion ist eine Folge von Operationen (Aktionen), die die Datenbank von einem konsistenten Zustand in einen konsistenten, eventuell veränderten, Zustand überführt, wobei das ACID-Prinzip eingehalten werden muss.
|
||||
- Aspekte:
|
||||
- Semantische Integrität: Korrekter (konsistenter) DB-Zustand nach Ende der Transaktion
|
||||
- Ablaufintegrität: Fehler durch "gleichzeitigen" Zugriff mehrerer Benutzer auf dieselben Daten vermeiden
|
||||
|
||||
ACID-Eigenschaften
|
||||
- Atomicity (Atomarität): Transaktion wird entweder ganz oder gar nicht ausgeführt
|
||||
- Consistency (Konsistenz oder auch Integritätserhaltung): Datenbank ist vor Beginn und nach Beendigung einer Transaktion jeweils in einem konsistenten Zustand
|
||||
- Isolation (Isolation): Nutzer, der mit einer Datenbank arbeitet, sollte den Eindruck haben, dass er mit dieser Datenbank alleine arbeitet
|
||||
- Durability (Dauerhaftigkeit / Persistenz): nach erfolgreichem Abschluss einer Transaktion muss das Ergebnis dieser Transaktion „dauerhaft“ in der Datenbank gespeichert werden
|
||||
|
||||
Kommandos einer Transaktionssprache
|
||||
- Beginn einer Transaktion: Begin-of-Transaction-Kommando BOT (in SQL implizit!)
|
||||
- commit: die Transaktion soll erfolgreich beendet werden
|
||||
- abort: die Transaktion soll abgebrochen werden
|
||||
|
||||
Vereinfachtes Modell für Transaktion
|
||||
- Repräsentation von Datenbankänderungen einer Transaktion
|
||||
- `read(A,x)`: weise den Wert des DB-Objektes A der Variablen x zu
|
||||
- `write(x, A)`: speichere den Wert der Variablen x im DB-Objekt A
|
||||
- Beispiel einer Transaktion T:
|
||||
- `read(A, x); x := x − 200; write(x, A);`
|
||||
- `read(B, y); y := y + 100; write(y, B);`
|
||||
- Ausführungsvarianten für zwei Transaktionen T_1 , T_2 :
|
||||
- seriell, etwa T_1 vor T_2
|
||||
- „gemischt“, etwa abwechselnd Schritte von T_1 und T_2
|
||||
- Probleme im Mehrbenutzerbetrieb
|
||||
- Inkonsistentes Lesen: Nonrepeatable Read
|
||||
- Variablen/Speicher ändert sich durch fertigstellen anderer Transaktionen während des Ablaufs
|
||||
- Abhängigkeiten von nicht freigegebenen Daten: Dirty Read
|
||||
- T_1 ändert X
|
||||
- T_2 liest X und rechnet damit
|
||||
- T_1 bricht ab und setzt änderung zurück
|
||||
- Ergebnis von T_2 ist damit falsch
|
||||
- Das Phantom-Problem
|
||||
- durch `insert` ändert sich `select` ergebnis; nachfolgende rechnungen auf vorherigen abruf sind falsch
|
||||
- Verlorengegangenes Ändern: Lost Update
|
||||
- updates gehen verloren, wenn gleiche Variablen gleicheitig beschrieben werden (oder kurz nacheinander)
|
||||
|
||||
> Serialisierbarkeit: Eine verschränkte Ausführung mehrerer Transaktionen heißt serialisierbar, wenn ihr Effekt identisch zum Effekt einer (beliebig gewählten) seriellen Ausführung dieser Transaktionen ist.
|
||||
- Schedule: "Ablaufplan" für Transaktion, bestehend aus Abfolge von Transaktionsoperationen
|
||||
|
||||
## Transaktionen in SQL
|
||||
Aufweichung von ACID in SQL: Isolationsebenen
|
||||
```sql
|
||||
set transaction
|
||||
[ { read only | read write }, ]
|
||||
[isolation level
|
||||
{ read uncommitted |
|
||||
read committed |
|
||||
repeatable read |
|
||||
serializable }, ]
|
||||
[ diagnostics size ...]
|
||||
```
|
||||
Standardeinstellung:
|
||||
```sql
|
||||
set transaction read write,
|
||||
isolation level serializable
|
||||
```
|
||||
|
||||
Bedeutung der Isolationsebenen
|
||||
- **read uncommitted**
|
||||
- schwächste Stufe: Zugriff auf nicht geschriebene Daten, nur für read only Transaktionen
|
||||
- statistische und ähnliche Transaktionen (ungefährer Überblick, nicht korrekte Werte)
|
||||
- keine Sperren → effizient ausführbar, keine anderen Transaktionen werden behindert
|
||||
- **read committed**: nur Lesen endgültig geschriebener Werte, aber nonrepeatable read möglich
|
||||
- **repeatable read**: kein nonrepeatable read, aber Phantomproblem kann auftreten
|
||||
- **serializable**: garantierte Serialisierbarkeit
|
||||
|
||||
|
||||
## Integritätsbedingungen in SQL
|
||||
- **not null**: Nullwerte verboten
|
||||
- **default**: Angabe von Default-Werten
|
||||
- **check** ( search-condition ):
|
||||
- Attributspezifische Bedingung (in der Regel Ein-Tupel-Integritätsbedingung)
|
||||
- Festlegung weitere lokale Integritätsbedingungen innerhalb der zu definierenden Wertebereiche, Attribute und Relationenschemata
|
||||
- Beispiel:
|
||||
```sql
|
||||
create table WEINE (
|
||||
WeinID int primary key,
|
||||
Name varchar(20) not null,
|
||||
Jahr int check(Jahr between 1980 and 2010),
|
||||
...
|
||||
)
|
||||
```
|
||||
- **primary key**: Angabe eines Primärschlüssel
|
||||
- **foreign key** ( Attribut(e) ) **references** Tabelle( Attribut(e) ): Angabe der referentiellen Integrität
|
||||
- **create domain**: Festlegung eines benutzerdefinierten Wertebereichs
|
||||
- Beispiel:
|
||||
```sql
|
||||
create domain WeinFarbe varchar(4)
|
||||
default 'Rot'
|
||||
check (value in ('Rot', 'Weiß', 'Rose'))
|
||||
|
||||
create table WEINE ( WeinID int primary key, Name varchar(20) not null, Farbe WeinFarbe, ...)
|
||||
```
|
||||
|
||||
Erhaltung der referentiellen Integrität
|
||||
- Überprüfung der Fremdschlüsselbedingungen nach Datenbankänderungen
|
||||
- Überprüfungsmodi von Bedingungen
|
||||
- `on update | delete`: Angabe eines Auslöseereignisses, das die Überprüfung der Bedingung anstößt
|
||||
- `cascade | set null | set default | no action`: Kaskadierung: Behandlung einiger Integritätsverletzungen pflanzt sich über mehrere Stufen fort, z.B. Löschen als Reaktion auf Verletzung der referentieller Integrität
|
||||
- `deferred | immediate` legt Überprüfungszeitpunkt für eine Bedingung fest
|
||||
- `deferred`: Zurückstellen an das Ende der Transaktion
|
||||
- `immediate`: sofortige Prüfung bei jeder relevanten Datenbankänderung
|
||||
- Beispiel: `... foreign key (Weingut) references ERZEUGER (Weingut) on delete cascade`
|
||||
|
||||
Die assertion-Klausel
|
||||
- Assertion: Prädikat, das eine Bedingung ausdrückt, die von der Datenbank immer erfüllt sein muss
|
||||
- Syntax (SQL:2003) `create assertion name check ( prädikat )`
|
||||
|
||||
## Trigger
|
||||
- Trigger: Anweisung/Prozedur, die bei Eintreten eines bestimmten Ereignisses automatisch vom DBMS ausgeführt wird
|
||||
- Anwendung:
|
||||
- Erzwingen von Integritätsbedingungen („Implementierung“ von Integritätsregeln)
|
||||
- Auditing von DB-Aktionen
|
||||
- Propagierung von DB-Änderungen
|
||||
- Definition:
|
||||
```sql
|
||||
create trigger ...
|
||||
after Operation
|
||||
Anweisungen
|
||||
```
|
||||
- Beispiel: Einfügen von neuen Aufträgen
|
||||
```sql
|
||||
create trigger Auftragszählung+
|
||||
on insertion of Auftrag A:
|
||||
update Kunde
|
||||
set AnzAufträge = AnzAufträge + 1
|
||||
where KName = new A.KName
|
||||
|
||||
create trigger Auftragszählung-
|
||||
on deletion ...:
|
||||
update ...- 1 ...
|
||||
```
|
||||
- Spezifikation von
|
||||
- Ereignis und Bedingung für Aktivierung des Triggers
|
||||
- Aktion(en) zur Ausführung
|
||||
- Syntax in SQL:2003 festgelegt
|
||||
```sql
|
||||
create trigger Name
|
||||
after | before Ereignis
|
||||
on Relation
|
||||
[ when Bedingung ]
|
||||
begin atomic SQL-Anweisungen end
|
||||
```
|
||||
- verfügbar in den meisten kommerziellen Systemen (aber mit anderer Syntax)
|
||||
- Weitere Angaben bei Triggern
|
||||
- **for each row** bzw. **for each statement**: Aktivierung des Triggers für jede Einzeländerungen einer mengenwertigen Änderung oder nur einmal für die gesamte Änderung
|
||||
- **before** bzw. **after**: Aktivierung vor oder nach der Änderung
|
||||
- **referencing new as** bzw. **referencing old as**: Binden einer Tupelvariable an die neu eingefügten bzw. gerade gelöschten („alten“) Tupel einer Relation ⇝ Tupel der Differenzrelationen
|
||||
|
||||
Integritätssicherung durch Trigger
|
||||
1. Bestimme Objekt $o_i$ , für das die Bedingung $\phi$ überwacht werden soll
|
||||
- i.d.R. mehrere $o_i$ betrachten, wenn Bedingung relationsübergreifend ist
|
||||
- Kandidaten für $o_i$ sind Tupel der Relationsnamen, die in $\phi$ auftauchen
|
||||
2. Bestimme die elementaren Datenbankänderungen $u_{ij}$ auf Objekten $o_i$ , die $\phi$ verletzen können
|
||||
- Regeln: z.B. Existenzforderungen beim Löschen und Ändern prüfen, jedoch nicht beim Einfügen etc.
|
||||
3. Bestimme je nach Anwendung die Reaktion $r_i$ auf Integritätsverletzung
|
||||
- Rücksetzen der Transaktion (rollback)
|
||||
- korrigierende Datenbankänderungen
|
||||
4. Formuliere folgende Trigger:
|
||||
`create trigger t-phi-ij after u ij on o i when ¬φ begin r i end`
|
||||
5. Wenn möglich, vereinfache entstandenen Trigger
|
||||
|
||||
Trigger in Oracle: Arten
|
||||
- Prädikat zur Einschränkung (when)
|
||||
- Zugriff auf altes (:old.col) bzw. neues (:new.col) Tupel
|
||||
- für delete: nur (:old.col)
|
||||
- für insert: nur (:new.col)
|
||||
- in when-Klausel nur (new.col) bzw. (old.col)
|
||||
- Transaktionsabbruch durch raise_application_error(code, message)
|
||||
- Unterscheidung der Art der DML-Anweisung
|
||||
- `if deleting then ... end if;`
|
||||
- `if updating then ... end if;`
|
||||
- `if inserting then ... end if;`
|
||||
|
||||
## Schemaevolution
|
||||
- Änderung eines Datenbankschemas durch neue/veränderte Anforderungen
|
||||
- Hinzufügen oder Löschen von Tabellen, Spalten, Integritätsbedingungen
|
||||
- Umbenennen oder Datentypänderungen
|
||||
- erfordert oft auch Anpassung/Übertragung der vorhandenen Datenbank ⇝ Datenbankmigration
|
||||
- leider nur eingeschränkte Unterstützung durch DB-Werkzeuge (DDL + Export/Import der Daten)
|
||||
|
||||
- SQL-DDL zum Löschen von Tabellen
|
||||
- Löschen von Tabellendefinitionen (beachte Unterschied zu delete)
|
||||
`drop table relationenname [ restrict | cascade ]`
|
||||
- cascade: erzwingt Löschen aller Sichten und Integritätsbedingungen, die zu dieser Basisrelation gehören
|
||||
- restrict (Defaultfall): das drop-Kommando wird zurückgewiesen, falls noch solche Sichten und Integritätsbedingungen existieren
|
||||
- SQL-DDL zur Änderung von Tabellen
|
||||
- `alter table relationenname modifikation`
|
||||
- **add column spaltendefinition** fügt eine neue Spalte hinzu; alle bereits in der Tabelle existierenden Tupel erhalten als Wert der neuen Spalte den angegebenen Defaultwert bzw. den null-Wert
|
||||
- **drop column spaltenname** löscht die angegebene Spalte (inkl. restrict- bzw. cascade)
|
||||
- **alter column spaltenname set default defaultwert** verändert Defaultwert der Spalte
|
||||
- Änderung von Integritätsbedingungen
|
||||
- nachträgliches Hinzufügen/Löschen von Tabellenbedingungen über **alter table**
|
||||
- Vergabe von Namen für Bedingungen über constraint bed-name-Klausel
|
||||
```sql
|
||||
alter table WEINE
|
||||
add constraint WeinBed_Eindeutig
|
||||
unique (Name, Weingut)
|
||||
```
|
||||
- Löschen über Namen `alter table WEINE drop constraint WeinBed_Eindeutig`
|
||||
|
||||
# Sichten und Zugriffskontrolle
|
||||
## Sichtenkonzept
|
||||
> 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
|
||||
- Vorteile
|
||||
- Vereinfachung von Anfragen für den Benutzer der Datenbank, etwa indem oft benötigte Teilanfragen als Sicht realisiert werden
|
||||
- Möglichkeit der Strukturierung der Datenbankbeschreibung, zugeschnitten auf Benutzerklassen
|
||||
- logische Datenunabhängigkeit ermöglicht Stabilität der Schnittstelle für Anwendungen gegenüber Änderungen der Datenbankstruktur
|
||||
- Beschränkung von Zugriffen auf eine Datenbank im Zusammenhang mit der Zugriffskontrolle
|
||||
- Probleme
|
||||
- automatische Anfragetransformation
|
||||
- Durchführung von Änderungen auf Sichten
|
||||
- Definition von Sichten in SQL
|
||||
```sql
|
||||
create view SichtName [ SchemaDeklaration ]
|
||||
as SQLAnfrage
|
||||
[ with check option ]
|
||||
```
|
||||
- Beispiel: alle Rotweine aus Bordeaux
|
||||
```sql
|
||||
create view Rotweine as
|
||||
select Name, Jahrgang, WEINE.Weingut
|
||||
from WEINE natural join ERZEUGER
|
||||
where Farbe = 'Rot' and Region = 'Bordeaux'
|
||||
```
|
||||
|
||||
## Ä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 bewusst ausgeblendete Teil der Basisdatenbank von Änderungen der Sicht nicht betroffen werden
|
||||
|
||||
Projektionssicht: $WNW:=\pi_{WeinID, Name, Weingut}(WEINE)$
|
||||
- in sql mit create view Anweisung
|
||||
`create view WNW as select WeinID, Name, Weingut from WEINE`
|
||||
- Änderungsanweisung für die Sicht WNW:
|
||||
`insert into WNW values (3333, 'Dornfelder', 'Müller')`
|
||||
- Problem der Konsistenzerhaltung falls Farbe oder Jahrgang als not null deklariert!
|
||||
|
||||
Selektionssichten: $WJ:=\sigma_{Jahrgang>2000}(\pi_{WeinID, Jahrgang}(WEINE))$
|
||||
```sql
|
||||
create view WJ as
|
||||
select WeinID, Jahrgang
|
||||
from WEINE
|
||||
where Jahrgang > 2000
|
||||
```
|
||||
|
||||
Kontrolle der Tupelmigration
|
||||
```sql
|
||||
create view WJ as
|
||||
select WeinID, Jahrgang
|
||||
from WEINE
|
||||
where Jahrgang > 2000
|
||||
with check option
|
||||
```
|
||||
|
||||
Verbundsichten $WE := WEINE \bowtie ERZEUGER$
|
||||
- In SQL:
|
||||
```sql
|
||||
create view WE as
|
||||
select WeinID, Name, Farbe, Jahrgang,
|
||||
WEINE.Weingut, Anbaugebiet, Region
|
||||
from WEINE, ERZEUGER
|
||||
where WEINE.Weingut = ERZEUGER.Weingut
|
||||
```
|
||||
- Änderungsoperationen hier in der Regel nicht eindeutig übersetzbar:
|
||||
`insert into WE values (3333, 'Dornfelder', 'Rot', 2002, 'Helena', 'Barossa Valley', 'Südaustralien')`
|
||||
- Änderung wird transformiert zu
|
||||
`insert into WEINE values (3333, 'Dornfelder', 'Rot', 2002, 'Helena')`
|
||||
- plus Änderung auf ERZEUGER !
|
||||
|
||||
Aggregierungssichten
|
||||
```sql
|
||||
create view FM (Farbe, MinJahrgang) as
|
||||
select Farbe, min(Jahrgang)
|
||||
from WEINE
|
||||
group by Farbe
|
||||
```
|
||||
- Folgende Änderung ist nicht eindeutig umsetzbar:
|
||||
```sql
|
||||
update FM
|
||||
set MinJahrgang = 1993
|
||||
where Farbe = 'Rot'
|
||||
```
|
||||
|
||||
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)
|
||||
|
||||
SQL-92-Standard
|
||||
- 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)
|
||||
|
||||
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
|
||||
- seit SQL:2003 Aufhebung einiger Einschränkungen, insbesondere
|
||||
- updates auf union all-Sichten (ohne Duplikateliminierung)
|
||||
- Inserts in Verbundsichten mit Primär-/Fremdschlüsselbeziehungen (mit einigen Einschränkungen)
|
||||
- Updates auf Verbundsichten mit Cursor
|
||||
|
||||
Alternative: Sichtänderungen mit Instead-of-Triggern
|
||||
- Definition von Triggern auf Sichten zur anwendungsspezifischen Propagierung der Änderungen auf die Basistabellen
|
||||
```sql
|
||||
create view V_WEINERZEUGER as
|
||||
select * from WEINE natural join ERZEUGER;
|
||||
create trigger V_WEINERZEUGER_Insert
|
||||
instead of insert on V_WEINERZEUGER
|
||||
referencing new as N
|
||||
for each row
|
||||
begin
|
||||
insert into WEINE values (:N.WeinID, :N.Name,
|
||||
:N.Farbe, :N.Jahrgang, :N.Weingut);
|
||||
end;
|
||||
```
|
||||
|
||||
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)
|
||||
- Vorsicht bei Aggregationssichten!
|
||||
- having versus where
|
||||
- keine geschachtelten Aggregationen in SQL
|
||||
|
||||
## Rechtevergabe
|
||||
- Zugriffsrechte (AutorisierungsID, DB-Ausschnitt, Operation)
|
||||
- AutorisierungsID ist interne Kennung eines „Datenbankbenutzers“
|
||||
- Datenbank-Ausschnitte: Relationen und Sichten
|
||||
- DB-Operationen: Lesen, Einfügen, Ändern, Löschen
|
||||
|
||||
```sql
|
||||
grant Rechte
|
||||
on Tabelle
|
||||
to BenutzerListe
|
||||
[with grant option]
|
||||
```
|
||||
- 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: „Jeder Benutzer kann seine Aufträge sehen und neue Aufträge einfügen (aber nicht löschen!).“
|
||||
```sql
|
||||
create view MeineAufträge as
|
||||
select *
|
||||
from AUFTRAG
|
||||
where KName = user;
|
||||
grant select, insert
|
||||
on MeineAufträge
|
||||
to public;
|
||||
```
|
||||
|
||||
Zurücknahme von Rechten
|
||||
```sql
|
||||
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
|
||||
|
||||
|
||||
## Privacy-Aspekte
|
||||
> Privacy (Privatsphäre): das Recht jedes Einzelnen auf einen geschützten privaten Raum, der von anderen nur in definierten Ausnahmefällen verletzt werden darf
|
||||
- elektronische Autobahn-Mautsysteme: Überwachung von Fahrzeugen
|
||||
- Kreditkartenaktivitäten und diverse Payback- bzw. Rabattkarten: Kaufverhalten von Kunden
|
||||
- Mobilfunksysteme: Bewegungsprofile der Nutzer
|
||||
- RFID-Technologie: etwa im Einzelhandel Kaufverhalten, Warenflüsse, etc.
|
||||
|
||||
Statistische Datenbanken
|
||||
- Datenbanken, in denen die Einzeleinträge dem Datenschutz unterliegen, aber statistische Informationen allen Benutzern zugänglich sind
|
||||
- statistische Information = aggregierte Daten (Durchschnittseinkommen etc.)
|
||||
- Problem: Gewinnung von Einzelinformationen durch indirekte Anfragen
|
||||
- Abhilfe: keine Anfragen, die weniger als n Tupel selektieren
|
||||
- Abhilfe: statistische Anfragen nicht erlauben, die paarweise einen Durchschnitt von mehr als m vorgegebenen Tupeln betreffen
|
||||
> Sind nur Ergebnisse von Aggregatfunktionen erlaubt, dann benötigt eine Person 1 + (n − 2)/m Anfragen, um einen einzelnen Attributwert zu ermitteln
|
||||
|
||||
> k-Anonymität: ein bestimmter Sachverhalt kann nicht zwischen einer vorgegebenen Anzahl k von Tupeln unterschieden werden
|
||||
- für viele Zwecke (klinische Studien etc.) werden auch Detaildaten (Mikrodaten) benötigt
|
||||
- weitere Zuordnungen (Namen etc.) etwa durch Verbund mit anderen Daten möglich?
|
||||
- Lösung: Data Swapping (??)
|
||||
- Vertauschen von Attributwerten einzelner Tupel
|
||||
- statistische Analysen noch gültig?
|
||||
- eine Anfrage nach einer beliebigen Kombination von Alter, Geschlecht, Familienstand und Postleitzahl liefert entweder eine leere Relation oder mindestens k Tupel
|
||||
- Ansätze
|
||||
- Generalisierung: Attributwerte durch allgemeinere Werte ersetzen, die einer Generalisierungshierarchie entnommen sind
|
||||
- die Verallgemeinerung des Alters einer Person zu Altersklassen: $\{35, 39\} \rightarrow 30-40$
|
||||
- Weglassen von Stellen bei Postleitzahlen: $\{ 39106, 39114 \}\rightarrow 39***$
|
||||
- Unterdrücken von Tupeln: Löschen von Tupeln, welche die k-Anonymität verletzen und damit identifizierbar sind
|
||||
|
||||
# NoSQL Datenbanken
|
||||
|
||||
# Anwendungsprogrammierung
|
Loading…
Reference in New Issue
Block a user