Principals, Permissions und Securables
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.
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.
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
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 principal
Zugriffe und Ausführungsrechte werden explizit verboten. Vorausgegangene oder nachfolgenden Genehmigungen werden stets von diesem Verbot überschrieben ! Verbote haben Vorrag 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.
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:
|
Schränken die Ausführung folgender Anweisungen pro Datenbankobjekt (z.B: Tabelle) für einen Datenbankbenutzer ein:
|
Einstellbar in: Enterprisemanager/ <Server>/ <Datenbank>/ Kontextmenü-> Eigenschaften/ Berechtigungen |
Einstellbar in: Enterprisemanager/ <Server>/ <Datenbank>/ Tabellen/ Kontextmenü-> Eigenschaften/Berechtigungen |
An wen können Serverberechtigungen erteilt werden
Windows- Benutzer
Windows- Gruppe
SqlServer Benutzerkonto
An wen können Datenbankberechtigungen erteilt werden
Datenbankbenutzer
Datenbankrolle