INGRES-Sicherheitskonzept und Integrität

Inhaltsübersicht

 

INGRES-Sicherheitskonzept und Integrität 1

14      INGRES-Sicherheitskonzept und Integrität 1

14.1   Das INGRES-Sicherheitskonzept 2

14.1.1   Die Anweisungen GRANT und DROP PERMIT. 4

14.1.2   Einschränkung des Datenzugriffs mit Views. 6

14.2   Integritätsvorschriften. 8

Aufgaben. 11

        

          

 

 

14  INGRES-Sicherheitskonzept und Integrität

 

 

         In    diesem   Kapitel    werden   zwei    in    Bezug    auf

         Systemeinschränkungen  verwandte Themen  - Sicherheitskonzept

         und Integrität  - beschrieben.  Zuerst werden alle von INGRES

         verwendeten  Benutzerklassen definiert  und erläutert. Danach

         werden die SQL-Anweisungen GRANT und DROP PERMIT beschrieben,

         die  die Vergabe  bzw. den  Entzug der Zugriffsrechte regeln.

         Am Ende  des  ersten  Teils  wird  die  Rolle  von  Views  im

         Zusammenhang mit dem Sicherheitskonzept erklärt.

 

         Der   zweite  Teil   des  Kapitels  ist  der  Datenintegrität

         vorbehalten. In diesem Zusammenhang wird die Anweisung CREATE

         INTEGRITY  ausführlich beschrieben. (Die Datenbank-Prozeduren

         und Regel, die auch der Datenintegrität gewährleisten, werden

         in Kapitel 20 beschrieben.)

 

Zurück zum Inhaltsverzeichnis

 

 

 

14.1     Das INGRES-Sicherheitskonzept

 

 

 

         Das  Sicherheitskonzept von  INGRES ermöglicht  eine flexible

         Vergabe  von   Zugriffsrechten.  Diese  Vergabe  kann  sowohl

         selektiv  als auch  dynamisch sein. Selektiv bedeutet, daß an

         verschiedene Benutzer unterschiedliche Rechte vergeben werden

         können, während  dynamisch die  Möglichkeit kennzeichnet, die

         schon  vergebenen Rechte  zum Teil  oder ganz  zu  entziehen.

         (In diesem  Abschnitt wird  mehrfach das  Wort "Benutzer" als

         Synonym für die Benutzerkennung verwendet.)

 

         INGRES   benutzt  zur   Identifizierung  die   Kennung  eines

         Benutzers.  Damit   ist  die   Benutzerkennung  das   einzige

         Bindeglied    zwischen   Datenbanksystem    einerseits    und

         dem  Anwender   andererseits.  Sie   wird  benutzt,   um  die

         Zugriffsrechte eines  Anwenders zu  überprüfen,  zu  vergeben

         oder zu entziehen.

 

         Alle  INGRES-Benutzer gehören  zu einer  der  folgenden  vier

         Benutzerklassen:

 

                        - Systemadministrator,

                        - Superuser,

                        - Datenbankadministrator (DBA)   und

                        - Benutzer.

 

         Der  INGRES-Systemadministrator  ist  diejenige  Person,  die

         das  INGRES-System installiert  und die Autorisierung anderer

         Benutzer durchführt. Während der Installation wird die INGRES

         Master-Datenbank (iidbdb)  erstellt, in  der die  Information

         über   die  Benutzerautorisierung   und   die   existierenden

         Datenbanken gespeichert wird.

 

         Nachdem   die  INGRES-Installation   abgeschlossen  ist   und

         iidbdb  erstellt  wurde,  wird  das  Dienstprogramm  accessdb

         vom  Systemadministrator  gestartet,  um  weiteren  Benutzern

         den Zugang  zum System  zu  ermöglichen.  Eine  ganz  geringe

         Anzahl  von Benutzern  soll der  Superuser-Klasse  angehören.

         Bei dieser  Klasse handelt  es  sich  um  die  Benutzer,  die

         nach  der   INGRES-Installation  dieselben   Rechte  wie  der

         Systemadministrator  besitzen, d.h.  das  Recht,  sowohl  das

         Dienstprogramm accessdb  auszuführen als auch die Rolle jedes

         anderen INGRES-Benutzers  zu  übernehmen.  (Weil  die  Rechte

         eines  Superusers identisch zu denen des Systemadministrators

         sind,  werden   wir  im   weiteren  Verlauf  des  Buches  die

         beiden Benutzerklassen einheitlich INGRES-Systemadministrator

         nennen.)

 

         Eine     größere    Anzahl    von    Benutzern    wird    vom

         Systemadministrator  durch   die  Eintragung   der  Erlaubnis

         zur Datenbankerstellung  zu Datenbankadministratoren  (DBA's)

         ernannt.  Dies geschieht  auch mit  Hilfe des Dienstprogramms

         accessdb.  Ein DBA  hat das  Recht, sowohl  die  Rolle  jedes

         gewöhnlichen  INGRES-Benutzers zu  übernehmen als  auch,  mit

         Hilfe des Dienstprogramms createdb  Datenbanken zu erstellen.

         (Alle  in diesem  Abschnitt erwähnten Dienstprogramme sind in

         Kapitel 15 ausführlich beschrieben.)

 

         Eine   Datenbank  kann  entweder  global  oder  privat  sein.

         Eine   globale  Datenbank   kann  grundsätzlich   von   allen

         INGRES-Benutzern verwendet  werden,  während  der  Zugang  zu

         einer  privaten Datenbank  nur dem Benutzer, der sie erstellt

         hat,  dem  Systemadministrator  und  autorisierten  Benutzern

         vorbehalten ist.

 

         Zu  den INGRES-Benutzern  gehören alle  Benutzer, die mit dem

         Dienstprogramm accessdb  als solche  bezeichnet sind und kein

         DBA-Recht haben. Ein INGRES-Benutzer kann nur die Datenbanken

         benutzen, zu  denen er Zugang hat. Für diese Datenbanken kann

         er die  Tabellen erstellen,  die dann  seine private Tabellen

         sind.

 

         Hinweis.

         Der   Zugang   zu   einer   Datenbank   gewährleistet   nicht

         automatisch    den   Zugriff    auf   die   Tabellen   dieser

         Datenbank!  Der  Tabellenzugriff  wird  durch  einen  anderen

         Autorisierungsmechanismus,  der im  weiteren  Verlauf  dieses

         Abschnitts beschrieben wird, ermöglicht.

 

Zurück zum Inhaltsverzeichnis

 

 

 

14.1.1   Die Anweisungen GRANT und DROP PERMIT

 

 

         Mit  der GRANT-Anweisung  können Zugriffsrechte für Tabellen,

         Views oder  Datenbank-Prozeduren an unterschiedliche Benutzer

         vergeben werden. Die Syntax dieser Anweisung ist

 

              GRANT liste_der_rechte ON [TABLE] tab_name|proz_name

                            TO kennung_liste | PUBLIC;

 

         liste_der_rechte kenzeichnet eine oder mehrere Zugriffsarten,

         die  durch Kommata  getrennt werden.  Es existieren insgesamt

         sechs erlaubte Zugriffsarten:

 

                 SELECT,

                 UPDATE [(spalte_1,...)] ,

                 INSERT,

                 DELETE,                 

                 ALL [PRIVILEGES]     und

                 EXECUTE.

 

Zugriffsart

Wirkung

SELECT   

Das SELECT-Zugriffsrecht  erlaubt dem  Benutzer den lesenden Zugriff  auf Reihen  einer  Tabelle.

UPDATE   

Das UPDATE-Zugriffsrecht  erlaubt dem  Benutzer das Ändern der  Reihen einer  Tabelle bzw. eines Views. Sind einzelne  Spalten der  Tabelle bzw.  des Views explizit angegeben, wird das Recht zur Änderung nur für diese  Spalten vergeben. Falls die Spaltenliste fehlt, können alle Spalten geändert werden.

INSERT   

erlaubt dem  Benutzer das  Einfügen von  Reihen  in                   einer Tabelle bzw. in einem View.

DELETE   

erlaubt dem  Benutzer das  Löschen  von  Reihen  in                   einer Tabelle bzw. in einem View.

ALL      

ALL     beinhaltet    alle    oben    beschriebenen                   Zugriffsrechte. (PRIVILEGES ist optional.)

EXECUTE  

erlaubt   dem   Benutzer   die   Ausführung   einer                   Datenbank-Prozedur.

 

         kennung_liste     kennzeichnet      eine     oder     mehrere

         Benutzerkennungen  -  getrennt  durch  Kommata  -, denen  das

         Zugriffsrecht vergeben wird, das in tab_recht_liste angegeben

         ist. PUBLIC bezeichnet alle Benutzerkennungen.

 

         Die  GRANT-Anweisung kann  nur von  einem Benutzer ausgeführt

         werden,  der Datenbankadministrator  für diese Datenbank ist.

         Dabei kann  der Tabellenzugriff  nur  für  die  Tabellen  der

         Datenbank gewährleistet werden, die dem DBA gehören.

 

         Beispiel 14.1

 

                   GRANT SELECT ON mitarbeiter TO petra, lothar;

 

         Die Benutzer petra und lothar haben die Erlaubnis, die Reihen

         der Tabelle mitarbeiter auszuwählen.

 

         Beispiel 14.2

 

             GRANT UPDATE(m_nr,einst_dat), DELETE ON arbeiten TO toni;

 

         Der  Benutzer toni  hat die  Erlaubnis, die  Spalten m_nr und

         einst_dat  der Tabelle  arbeiten  zu  ändern  und  Reihen  zu

         löschen.

 

         Beispiel 14.3

 

                   GRANT ALL ON projekt TO margit;

 

         Der  Benutzer margit  hat alle Zugriffsrechte für die Tabelle

         projekt.

 

         Beispiel 14.4

 

               GRANT SELECT,INSERT,DELETE,UPDATE ON projekt TO PUBLIC;

 

         Alle Benutzer  können Reihen  der Tabelle  projekt auswählen,

         einfügen, löschen und modifizieren.

 

         INGRES  unterstützt   z.Zt.  nicht   die   vom   SQL-Standard

         definierte   Anweisung  REVOKE,   mit  der  die  vorgegebenen

         Zugriffsrechte  entzogen  werden  können.  Die  entsprechende

         Anweisung bei  INGRES heißt  DROP PERMIT, und ihre Syntax hat

         folgende Form

 

              DROP PERMIT ON tab_name|proz_name ALL|ganzzahl_liste;

 

         Mit   der  ganzzahl_liste  wird  eine  Liste  von  Ganzzahlen

         definiert,  die die  Zugiffsrechte der Tabelle bzw. des Views

         namens tab_name,  die entzogen  werden sollen, spezifizieren.

         (Dasselbe   gilt  für   die  Datenbank-Prozedur   proz_name.)

         Der  existierende Zusammenhang  zwischen den  Zugriffsrechten

         einerseits  und den  angegebenen Ganzzahlen andererseits kann

         mit Hilfe  der  HELP  PERMIT-Anweisung  erlangt  werden.  Mit

         der Angabe  ALL werden  alle für  die Tabelle  tab vergebenen

         Zugriffsrechte entzogen.

 

         Beispiel 14.5

 

                        DROP PERMIT ON projekt 2,3;

 

         Mit der  DROP PERMIT-Anweisung  in Beispiel  14.5 werden  das

         zweite  und das  dritte Zugriffsrecht für die Tabelle projekt

         entzogen.

 

Zurück zum Inhaltsverzeichnis

 

 

 

14.1.2   Einschränkung des Datenzugriffs mit Views

 

 

         Wie  schon in  Kapitel 10  gezeigt, können Views für folgende

         Zwecke benutzt werden:

 

         - um den verschiedenen Benutzern unterschiedliche Sichtweisen

           auf Datenwerte einer Datenbank zur Verfügung zu stellen;

         - um  die  Tabellen  mit  einer  großen  Anzahl  von  Spalten

           den  Benutzern  gegenüber  in  einer  eingeschränkten  Form

           darzustellen, wodurch  die Wahrnehmung  und Handhabung  für

           die Benutzer einfacher wird.

 

         Zusätzlich dazu  können die  Datenwerte einer  Datenbank  mit

         Hilfe von  Views gezielt  geschützt werden.  Wenn  z.B.  eine

         Tabelle  eine Spalte  mit  Gehältern  der  Mitarbeiter  einer

         Firma  enthält, ist  es möglich,  durch die  Erstellung eines

         Views, das  die Gehälter-Spalte nicht beinhaltet, den Zugriff

         auf die  Tabelle einzuschränken.  In diesem Fall könnten z.B.

         alle Benutzer das SELECT-Zugriffsrecht auf das erstellte View

         haben,  während nur  eine kleine Anzahl ausgewählter Benutzer

         dasselbe  Zugriffsrecht auf  die ganze Tabelle und damit auch

         auf die  Spalte mit  den Gehältern  bekommen könnte. Dieselbe

         Regel  gilt auch  für alle  sicherheitsrelevanten  Datenwerte

         einer Datenbank.

 

         Mit   Hilfe   der   Beispieldatenbank   werden   verschiedene

         Möglichkeiten gezeigt,  wie der  Zugriff auf Datenwerte einer

         Datenbank eingeschränkt werden kann.

 

         Beispiel 14.6

 

         Erstellen  Sie  ein  View, das den Zugriff auf die Mittel der

         Tabelle projekt nicht erlaubt.

 

                        CREATE v_pr_mittn

                           AS SELECT pr_nr, pr_name

                           FROM projekt;

 

         Die    Benutzer   des    Views   v_pr_mittn    sehen    einen

         Spaltenausschnitt der  Tabelle projekt.  Mit  der  Erstellung

         dieses  Views  kann  der  Zugriff  auf  die  Tabelle  projekt

         eingeschränkt werden.  Damit kann allen Benutzern der Zugriff

         auf das  View ermöglicht  und  nur  den  Benutzern,  die  die

         Projektmittel  kennen  dürfen,  der  Zugriff  auf  die  ganze

         Tabelle erlaubt werden.

 

         Beispiel 14.7

 

         Erstellen Sie ein View, das alle Mitarbeiter der Abteilung a2

         enthält.

 

                        CREATE VIEW v_mit_a2

                           AS SELECT m_nr, m_name, m_vorname, pr_nr

                           FROM mitarbeiter

                           WHERE pr_nr = 'a2';

 

         Das View  v_mit_a2 stellt  einen Ausschnitt  der  Reihen  der

         Tabelle mitarbeiter dar.

 

         Beispiel 14.8

 

         Erstellen   Sie  ein  View,  das  Personalnummer,  Namen  und

         Vornamen aller Projektleiter beinhaltet.

 

              CREATE VIEW v_arbmit_pl

                 AS SELECT mitarbeiter.m_nr, m_name, m_vorname

                 FROM mitarbeiter, arbeiten

                 WHERE mitarbeiter.m_nr = arbeiten.m_nr

                 AND aufgabe = 'Projektleiter';

 

         Das  View  v_arbmit_pl stellt einen Ausschnitt der Reihen und

         Spalten der Tabellen mitarbeiter und arbeiten dar.

 

Zurück zum Inhaltsverzeichnis

 

 

 

14.2      Integritätsvorschriften

 

 

         Die Integrität  einer Datenbank  ist eine  der  grundlegenden

         Eigenschaften, die ein Datenbanksystem gewährleisten muß. Sie

         bezieht  sich auf  die Integrität  von  Datenwerten,  die  in

         der Datenbank  gespeichert sind.  Ein Datenbanksystem  muß in

         der Lage  sein, unsinnige bzw. widersprüchliche Datenwerte zu

         erkennen und abzuweisen.

 

         Die  Vorschriften,   mit  denen   das   Einfügen   bzw.   das

         Modifizieren  der   Datenwerte  einer   Datenbank   untersagt

         wird,  falls  die  Definition  eines  Datenbankobjektes  bzw.

         eine  vom Benutzer  definierte Regel  verletzt  wird,  werden

         Integritätsvorschriften ("integrity constraints") genannt.

 

         INGRES unterstützt zwei Angaben:

 

                      - NOT NULL in der CREATE TABLE-Anweisung und

                      - UNIQUE in der CREATE INDEX-Anweisung,

 

         die die  Verletzung der  Definition einer  Tabelle bzw. eines

         Index regulieren. Mit der Angabe NOT NULL wird jeder Versuch,

         einen  NULL-Wert in  die entsprechende Spalte einzufügen, vom

         System  abgewiesen. Genauso weist das System den Versuch, das

         Einfügen der  mehrfach vorhandenen  Werte in eine Spalte, für

         die ein UNIQUE-Index existiert, ab.

 

         Abgesehen   von  diesen    im   INGRES-System   existierenden

         Integritätsvorschriften  ist es bei INGRES möglich, explizite

         Vorschriften für  Tabellen zu  definieren. Diese Vorschriften

         können mit Hilfe:

 

                       - einer  INGRES-Benutzerschnittstelle wie  QBF,

                         RBF oder Report-Writer;

                       - des Knowledge Management-Moduls   und

                       - der CREATE INTEGRITY-Anweisung

 

         definiert     werden.    In     diesem     Kapitel     werden

         die    Integritätsvorschriften,   die    mit    der    CREATE

         INTEGRITY-Anweisung  definiert  werden  können,  beschrieben.

         (Die  Möglichkeiten,   die  INGRES-Benutzerschnittstellen  in

         dieser  Hinsicht bieten,  werden z.T. in den Kapiteln 4 und 5

         erläutert. Der Knowledge Management-Modul wird ausführlich in

         Kapitel 20 erklärt.)

 

         Die     CREATE     INTEGRITY-Anweisung     definiert     eine

         Integritätsvorschrift  für eine  Tabelle. Diese Anweisung hat

         folgende Form

 

                   CREATE INTEGRITY ON tab_name [alias_name]

                         IS bedingung;

 

         tab_name  ist   der   Name   der   Tabelle   für   die   eine

         Integritätsvorschrift definiert wird. alias_name kennzeichnet

         den   optionalen   Aliasnamen   dieser   Tabelle.   bedingung

         definiert  eine   Bedingung,  die  die  Integritätsvorschrift

         darstellt.  Nur   der  Tabelleneigentümer   darf   für   eine

         Tabelle  die Integritätsvorschriften  mit  Hilfe  der  CREATE

         INTEGRITY-Anweisung definieren.

 

         Wenn  die Integritätsvorschrift  für  eine  geladene  Tabelle

         definiert  wird,  müssen  alle  existierenden  Reihen  dieser

         Tabelle   die  Vorschrift  erfüllen.  Falls  dies  nicht  der

         Fall  ist, wird  die  CREATE  INTEGRITY-Anweisung  mit  einer

         Fehlermeldung abgewiesen.

 

         Nach der erfolgreichen Definition einer Integritätsvorschrift

         wird   jede  Änderung   der  Tabelle,   die  in   der  CREATE

         INTEGRITY-Anweisung   genannt   ist,   auf   die   Integrität

         überprüft.  Alle   Versuche,  die  definierte  Vorschrift  zu

         verletzen,  werden vom  INGRES-System abgewiesen,  ohne einen

         Fehler zu melden.

 

         Beispiel 14.8

 

               CREATE INTEGRITY ON projekt

                    IS mittel < 200000;

 

         In Beispiel  14.8 ist  eine Integritätsvorschrift  definiert,

         die  die obere  Grenze der Mittel aller Projekte auf 200000DM

         festsetzt.

 

         Hinweis.

         Der Zeitpunkt der Ausführung einer CREATE INTEGRITY-Anweisung

         muß genau  überlegt werden, weil diese Anweisung die Tabelle,

         auf  die sich  die  Integritätsvorschrift  bezieht,  exklusiv

         sperrt. Zusätzlich  dazu kann die Ausführung dieser Anweisung

         relativ lange  dauern, wenn  die Tabelle,  auf die  sich  die

         Vorschrift bezieht, groß ist.

 

         Mit der Anweisung

 

                DROP INTEGRITY ON tab_name ALL | zahl_1 [,zahl_2,...];

 

         können  eine   oder  mehrere,   für  die   Tabelle   tab_name

         definierte  Integritätsvorschriften   gelöscht  werden.   Die

         Ganzzahlen zahl_1, zahl_2,... kennzeichnen die mit der CREATE

         INTEGRITY-Anweisung  definierten Integritätsvorschriften  für

         die   Tabelle   tab_name.   Der   existierende   Zusammenhang

         zwischen   den  Integritätsvorschriften  einerseits  und  den

         angegebenen   Ganzzahlen  andererseits  kann  mit  Hilfe  der

         HELP  INTEGRITY-Anweisung  erlangt  werden.  Mit  der  Angabe

         ALL   werden  alle   für  die  Tabelle  tab_name  definierten

         Integritätsvorschriften gelöscht.

 

         Jede  vorübersetzte und  gespeicherte Abfrage,  die sich  auf

         eine  in  der  DROP  INTEGRITY-Anweisung  angegebene  Tabelle

         bezieht, muß  noch einmal  übersetzt und  gespeichert werden.

         Der Grund  für diese  Maßnahme ist,  daß  alle  existierenden

         Integritätsvorschriften  bei  der  Erstellung  einer  solchen

         Abfrage  berücksichtigt werden.  (Dasselbe gilt  für  die  in

         Kapitel 18 beschriebenen Prozeduren.)

 

Zurück zum Inhaltsverzeichnis

 

 

 

 Aufgaben.

 

A.14.1 Die  Tabelle  systeme  wird  mit  der  folgenden  CREATE

              TABLE-Anweisung erstellt:

 

                   CREATE TABLE systeme

                       (s_name CHAR(15) NOT NULL,

                        version CHAR(5) NOT NULL,

                        hersteller CHAR(20),

                        ort CHAR(20),

                        preis FLOAT);

 

              Vergeben    Sie   den   genannten   Benutzern   folgende

              Zugriffsrechte:

 

              a) Dem Benutzer gabi alle Rechte für die obige Tabelle.

              b) Dem  Benutzer  rainer  SELECT-Rechte  für  die  ganze

                 Tabelle.

              c) Dem  Benutzer alex  INSERT- und DELETE-Rechte für die

                 ganze Tabelle.

              d) Dem Benutzer  peter  UPDATE-Rechte  für  die  Spalten

                 hersteller  und preis.  Dieser  Benutzer  darf  diese

                 Rechte weiteren Benutzern vergeben.

 

A.14.2 Entziehen Sie den Benutzern gabi und peter die in A.14.1

              vergebenen Zugriffsrechte.

 

Zurück zum Inhaltsverzeichnis