mk-prg-net \ ms-sql \admin \ access-control \schemas

Datenbankschemas: Besitz aufteilen

Ein Datenbankschema ist ein Namensraum für eine Teilmenge von Datenbankobjekten wie Tabellen, gepeicherten Prozeduren etc. Jedes Datenbankobjekt gehört zu genau einem Datenbankschema.

In SqlServer 2000 stellte sich die Beziehung zwischen Schemas und Benzutzer noch wie folgt dar:

Schema und Benutzer waren fest miteinander verbunden. Wenn z.B. Anton die Tabelle T1 erzeugte mit create table T1 (...), dann war diese Teil seines Anton- Schemas, wie folgender Select- Befehl zeigt: select * from Anton.T1

Löschen des Benutzers Anton hatte zur Folge, dass das zugeordnete Datenbankschema plus den darin enthaltenen Entitäten wie Tabellen, gespeicherten Prozeduren etc. ebenfalls gelöscht wurden. Ein aus dem Unternehmen scheidender Mitarbeiter namens Anton, der viele bedeutende Datenbanken- Entitäten erschaffen hatte, blieb so dem Unternehmen ewig in Erinnerung...

Workarround dbo-Schema

Ein Workarround aus dieser Situation bot die Möglichkeit, alle Datenbankentitäten unter dem Schema des dbo anzulegen. Der dbo ist der vom System vordefinierte Datenbankbenutzer für den Datenbank- Besitzer. Das Login, für das der Datenbankbesitzer steht, ist austauschbar (siehe oben). Damit entkoppelt das dbo- Schema die Entitäten von denen sie erschaffenden, angemeldeten Benutzern (Logins).

Vollständige Entkopplung von Schema und Benutzer ab Version 2005

Diese enge Bindung von Benutzern und Schemen wurde in Sql Server 2005 aufgegeben. Schemen können jetzt völlig unabhängig von Benutzern definiert werden:

Schemabesitz

Einem Schema kann ein Datenbankbenutzer als Besitzer zugeordnet werden. In einer Sitzung kann der Datenbankbenutzer dann Entitäten in seinem Schema anlegen, bearbeiten und löschen, sowie Zugriffsrechte an den Entitäten im Schema anderen Datenbankbenutzern gewähren.

Der dbo als Besitzer einer Datenbank ist auch automatisch Besitzer des Schemas (unabhängig davon, wer als Schemabesitzer eingetragen ist), und kann damit in jedem Schema schalten und walten, wie er will.

Zugriff auf Schema administrieren

In einem TSQL- Grant Befehl wird das Schema als Securable eingesetzt. Dabei ist sein Name mit dem Namensraumpräfix schema:: zu erweitern.

-- Lesenden Zugriff auf alle Objekte im Schema Kosmos dem Benutzer Anton gewähren:
grant select on schema::Kosmos to Anton