Die folgenden Benutzer besitzen bestimmte Privilegien:
Der universelle Benutzer besitzt alle Sonder-Privilegien für eine Datenbank mit Ausnahme von USAGE ON STOGROUP.
Der Eigentümer einer Storage Group besitzt das Sonder-Privileg USAGE ON STOGROUP für diese Storage Group.
Der Eigentümer eines Schemas besitzt alle Tabellen-Privilegien für die Basistabellen seines Schemas.
Welche Zugriffsrechte der Eigentümer eines View für den View besitzt, ist auf "Privilegien vergeben mit der SQL-Anweisung GRANT" beschrieben.
Universeller Benutzer, alle Schema-Eigentümer und Eigentümer von Storage Groups sowie Eigentümer von Views, die ihre Privilegien mit „WITH GRANT OPTION“ erhalten haben, können ihre jeweiligen Privilegien mit der SQL-Anweisung GRANT an andere Benutzer weitergeben.
Die SQL-Anweisung GRANT lässt sich schematisch wie folgt darstellen:
GRANT
Privileg(ien) ON
Objekt TO
Grantee(s) [WITH GRANT OPTION]
GRANT kann als eigenständige SQL-Anweisung oder als Teil der CREATE SCHEMA-Anweisung angegeben werden.
„Grantor“ ist der Benutzer, der das Privileg mit GRANT erteilt, „Grantee“ ist der Benutzer, dem dieses Privileg erteilt wird. „Objekt“ kann je nach Privileg eine Tabelle oder eine Datenbank bzw. eine Storage Group sein.
Ein Benutzer kann ein ihm mit der GRANT-Anweisung erteiltes Privileg nur dann als Grantor an andere Benutzer weitergeben, wenn es ihm „WITH GRANT OPTION“ erteilt wurde. Der Grantee kann also seinerseits zum Grantor werden und das Privileg wiederum mit oder ohne Zusatz „WITH GRANT OPTION“ vergeben. Auf diese Weise lässt sich ein hierarchisch organisierter Zugriffsschutz realisieren.
Für „Grantee“ kann der Grantor in der GRANT-Anweisung die Berechtigungsschlüssel ausgewählter Benutzer oder das Schlüsselwort PUBLIC angeben. Mit PUBLIC wird das Privileg allen Benutzern erteilt, die berechtigt sind, mit der Datenbank zu arbeiten.
Vergibt ein Grantor einem Grantee dasselbe Privileg einmal mit und einmal ohne die Klausel „WITH GRANT OPTION“, dann ist stets „WITH GRANT OPTION“ wirksam.
Mit der GRANT-Anweisung kann ein Grantor ein Tabellen-Privileg auch an den Eigentümer eines anderen Schemas vergeben. Auf diese Weise kann ein Schema-Eigentümer z.B. Views für sein Schema definieren, denen Tabellen eines anderen Eigentümers zu Grunde liegen.
Sonder-Privilegien und Tabellen-Privilegien sollten nach einem wohlüberlegten Datenschutzkonzept vergeben werden. Insbesondere sollten Sonder-Privilegien nur einem ausgewählten Benutzerkreis zur Verfügung gestellt werden, wobei die Klausel „WITH GRANT OPTION“ sehr restriktiv zu verwenden ist.
Besonderheiten bei der Privilegien-Vergabe für das Erstellen von Views
Die Berechtigung, mit CREATE VIEW einen View zu erstellen, erhält ein Benutzer nur über das Tabellen-Privileg SELECT für die diesem View zu Grunde liegenden Tabellen. Zwei Fälle sind zu unterscheiden:
Der View ist änderbar.
In diesem Fall liegt dem View eine Basistabelle zu Grunde. Besitzt der Eigentümer des View für die zu Grunde liegende Basistabelle die Tabellen-Privilegien INSERT, UPDATE oder DELETE, dann erhält der Eigentümer auch automatisch das entsprechende Tabellen-Privileg für den View.Der View ist nicht änderbar.
Der Eigentümer erhält automatisch das Tabellen-Privileg SELECT für den View.
Die automatische Vergabe der Privilegien für den View kann man sich so vorstellen, dass SESAM/SQL mit einer impliziten GRANT-Anweisung ein entsprechendes Tabellen-Privileg für den View erteilt.
Der View-Eigentümer kann ein Tabellenprivileg für einen View nur dann mit GRANT weitergeben, wenn er es für die dem View zu Grunde liegenden Basistabellen „WITH GRANTOPTION“ besitzt.
Beispiel
Das folgende Beispiel skizziert die Privilegienvergabe für den Eigentümer eines View und die Weitergabe von Privilegien an einen anderen Benutzer.
Benutzer A ist der Eigentümer der Basistabelle T und besitzt damit auch die TabellenPrivilegien SELECT, INSERT, DELETE, UPDATE und REFERENCES. A ist berechtigt, diese Privilegien an andere Benutzer weiterzugeben.
A erteilt nun das Tabellen-Privileg DELETE „WITH GRANT OPTION“ und das TabellenPrivileg SELECT an den Benutzer B:
GRANT DELETE ON T TO B WITH GRANT OPTION
GRANT SELECT ON T TO B
Aufgrund der SELECT-Berechtigung für die Basistabelle T darf B einen View auf T erzeugen:
CREATE VIEW V AS SELECT * FROM T
B erhält damit automatisch, d.h. von SESAM/SQL, die für die Tabelle T erteilten Tabellen-Privilegien (SELECT und DELETE „WITH GRANT OPTION“) für den View V. Damit bestehen für B folgende Tabellen-Privilegien für T und V:
Grantor | Grantee | Objekt | Tabellen | WITH GRANT OPTION |
A | B | T | DELETE | ja |
A | B | T | SELECT | nein |
SESAM/SQL | B | V | DELETE | ja |
SESAM/SQL | B | V | SELECT | nein |
Tabelle 43: Tabellen-Privilegien für Basistabelle T und View V
Anschließend werden von A mit GRANT folgende Tabellen-Privilegien erteilt:
GRANT UPDATE ON T TO B,C
GRANT INSERT ON T TO B WITH GRANT OPTION
B erteilt das folgende Tabellen-Privileg:
GRANT DELETE ON V TO D WITH GRANT OPTION
Damit sind folgende Tabellen-Privilegien neu hinzugekommen:
Grantor | Grantee | Objekt | Tabellen- Privileg | WITH GRANT OPTION |
A | B | T | UPDATE | nein |
A | C | T | UPDATE | nein |
SESAM/SQL | B | V | UPDATE | nein |
A | B | T | INSERT | ja |
SESAM/SQL | B | V | INSERT | ja |
B | D | V | DELETE | ja |
Tabelle 44: Neu hinzugekommene Tabellen-Privilegien für Basistabelle T und View V