Der Zugriff auf die Ressourcen eines SQL Servers ist in der Regel auf Programme und Benutzer einzuschränken, die der
Administraotor als vertrauenswürdig befindet, und die den Zugriff auf die Ressourcen benötigen. Die Benutzer und Programme werden
verallgemeinert als Principal bezeichnet, denen auf die gesicherten Ressourcen (Securable) mittels einer
Permisson der Zugriff erlaubt, oder explizit verwehrt werden kann.
Struktur einer Berechtigung
Sicherungsfähige Elemente (Securables) und ihre Besitzer
Die Verhältnisse im SQL- Server sind ähnlich wie in unserer kapitalistischen Welt: jedes wertvolle
Ding hat einen Besitzer (owner) ! Die wertvollen Dinge sind hier die sicherungsfähigen Elemente, oder kurz
Securables, wie Serverinstanz, Datenbanken, Datenbank- Schemen, Tabellen u.s.w..
Die gesamte Serverinstanz z.B. ist ein securable, die von den Systemadministratoren besessen wird. Sie dürfen mit ihr tun
und lassen, wass sie wollen !
Der gesamte Inhalt eines Securables ist automatisch auch im Besitz des Besitzers. Möchte jemand auf den Inhalt zugreifen,
dann benötigt er seine Genehmigung (permission). Die Genehmigung (oder auch Berechtigung) kann damit immer
nur vom Besitzer erteilt werden.
Für Entitäten einer Datenbank, wie Tabellen und gespeicherte Prozeduren, wird der Besitzer durch ihre zwingende Zugehörigkeit
zu einem Schema festgelgt. Datenbankbenutzer können Schemen direkt besitzen, und sind damit indirekt Besitzer
aller enthaltener Entitäten.
Erstbesitz dem Schöpfer
Wie in der realen Welt gehört dem Schöpfer zunächst seine Schöpfung. Erzeugt ein Administrator eine Datenbank, dann ist er
zunächst deren Besitzer. Als Datenbankbesitzer kann er wiederum Entitäten wie Tabellen und gespeicherte Prozeduren anlegen,
die dann automatisch in seinem Besitz sind.
Michaleangelo: Die Erschaffung Adams (Gemeinfrei)
Die Besitzverhältnisse können sich auch ändern, indem z.B. mittels ALTER AUTHORIZATION ON ... TO ... der Besitz an einem
securable an ein anderes Principal übertragen wird. Weiteres dazu siehe unten.
Mehrstufiger Zugriffsschutz
Übersicht
der Zugriffsbeschränkungen eines Benutzers auf SQL- Serverressourcen.
Beim Zugriff auf eine Entität in einer Datenbank sind mehrere Sicherheitsbarrieren zu überwinden, wie das Bild oben zeigt. Zuerst muss eine erfolgreiche Anmeldung
an der Serverinstanz gelingen (Login). Dann muss die Anmeldung als Datenbankbenutzer in der Datenbank eingetragen sein, in welcher die gesicherte
Entität aufbewahrt wird. Der Datenbankbenutzer wiederum muss über ausreichend Rechte verfügen, um auf die Ressource in gewünschter Art und Weise zuzugreifen.
Berechtigungen (Permissions)
Ein Besitzer wie der Systemadministrator ("besitzt" Datenbankinstanz) kann anderen Prinzipals
den Zugriff auf seine Bsitztümer (securables) genehmigen oder explizit verwehren mittels
folgender TSQL Befehle:
GRANT permission ON securable TO principal Dem Prinzipal den Zugriff auf
das securable genehmigen.
DENY permission ON securable TO principalZugriffe und
Ausführungsrechte werden explizit verboten. Vorausgegangene oder nachfolgenden Genehmigungen
werden stets von diesem Verbot überschrieben ! Verbote haben Vorrag vor Genehmigungen.
Bsp.: Verbot hat Vorrang vor Genehmigungen
Im Bild bekommen der gute, als auch der böse Smiley der Reihe nach Genehmigungen als auch Verbote für den
Zugriff auf Ressource A erteilt. Beide haben am Ende jedoch keinen Zugriff, da auch ein vorausgegangens
Verbot (2. für bösen Smiley) eine nachfolgend erteilte Genehmigung außer Kraft setzt.
Revoke Ein bestehende Genehmigung oder ein bestehendes Verbot werden gelöscht.
Bsp.: Löschen eines Verbotes kann eine Berechtigung freischalten
Achtung:
Verbote
haben Vorrang vor einer Erlaubnis ! Z.B. wird durch ein aus
Mitgliedschaft geerbtes Verbot einer Rolle eine mögliche
individuelle Erlaubnis für einen Datenbankbenutzer eliminiert.
Typen von Berechtigungen
Anweisungsberchtigungen
Objektberechtigungen
Schränken die Ausführung fogender TSQL- Anweisungen
für einen Datenbankbenutzer ein:
BACKUP DATABASE
BACKUP LOG
CREATE DATABASE
CREATE DEFAULT
CREATE FUNCTION
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VIEW
Schränken die Ausführung folgender Anweisungen
pro
Datenbankobjekt
(z.B: Tabelle) für einen
Datenbankbenutzer ein: