SQL Server: Sicherheit mit Schema

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Die älteren SQL Server-Versionen haben einen Nachteil: Sie benötigen hier einen Benutzer, dem eine neu erstellte Datenbank gehört. Genauso gibt es auch für alle weiteren Objekte wie Tabellen, Sichten, gespeicherte Prozeduren und so weiter einen Besitzer – nämlich den Benutzer, der das Objekt erstellt hat. Meist legt man diese Elemente im Kontext eines Windows-Benutzers an, was zum Beispiel dazu führt, dass Sie diesen Benutzer nicht einfach löschen können, ohne zuvor alle Elemente dieses Benutzers an einen anderen Benutzer übertragen zu haben. Aus diesem Grund hat Microsoft mit SQL Server 2005 den Typ namens “Schema” eingeführt. Diesem werden nun nicht nur neu erstellte Objekte zugeordnet, sondern Sie können auch mehrere Schemas pro Datenbank verwenden, um beispielsweise Elemente nach verschiedenen Gruppen zu sortieren.

Schemas sind also grundsätzlich eine Art Namensraum für Datenbankobjekte wie Tabellen, Sichten, gespeicherte Prozeduren et cetera. Der Zweck ist dabei, wie oben bereits erwähnt, die direkte Zuordnung von Windows-Benutzern oder -Benutzergruppen als Besitzer der Datenbankobjekte zu unterbrechen, da sonst, wenn der Benutzer oder die Benutzergruppe entfernt werden soll, die Besitzer aller betroffenen Datenbankobjekte geändert werden müssten.

Wenn Sie hingegen mit Schemas arbeiten, erhalten Sie eine Zwischenschicht. Es gibt zwar nun immer noch einen Besitzer des Schemas, das wiederum die Datenbankobjekte enthält, aber Sie brauchen nur noch den Besitzer des Schemas zu wechseln, wenn Sie den alten Besitzer in Form eines Benutzers oder einer Benutzergruppe nicht mehr verwenden können.

Fachliche Gruppierung

Mit einem Schema können Sie die Objekte einer Datenbank nach dem fachlichen Zusammenhang gruppieren oder auch nach den gewünschten Berechtigungen. Damit können wir, um beim Beispiel der Suedsturm_SQL-Datenbank zu bleiben, etwa für die beiden Benutzergruppen Management und Bestellannahme zwei geeignete Schemas erstellen und diesen die relevanten Datenbankobjekte zuordnen.

Schemas für die Sicherheit

Außerdem können Sie natürlich auch Schemas einrichten, um über diese dann die Berechtigungen an den verschiedenen Elementen der Datenbank zu definieren. Die fachliche Gruppierung und die Gruppierung der Elemente nach Sicherheits- beziehungsweise Berechtigungsaspekten schließt sich ja nicht aus. Wenn Sie etwa, wie soeben vorgeschlagen, ein Schema namens Management und eines namens Bestellannahme erstellen, könnten Sie alle Elemente, die nur von den Mitarbeitern der Bestellannahme benötigt werden, im Kontext eines Schemas namens Bestellannahme speichern. Die Elemente, auf welche die Mitarbeiter der Bestellannahme keinen Zugriff haben sollen, aber das Management, erstellen Sie im Kontext eines Schemas namens Management. Wenn ein Mitarbeiter des Managements nun Zugriff nicht nur auf die Elemente des Schemas Management haben soll, sondern auch auf die Elemente des Schemas Bestellannahme, weisen Sie einen Windows-Benutzer einfach den Windows-Benutzergruppen Management und Bestellannahme zu.

Anlegen eines Schemas

Wir legen nun in unserer Beispieldatenbank Suedsturm_SQL zunächst ein neues Schema namens Bestellannahme an. Dazu navigieren Sie im Objekt-Explorer des SQL Server Management Studios zunächst zu dieser Datenbank und dann zum Eintrag Sicherheit|Schemas. Wenn Sie diesen Eintrag öffnen, erkennen Sie, dass es dort schon eine Reihe vorgefertigter Schemas gibt, zum Beispiel db_accessadmin, db_datareader, db_datawriter und so weiter (siehe Bild 1). Einige dieser Schemas können Sie auch entfernen, wenn Sie verhindern wollen, dass diese versehentlich für Benutzer festgelegt werden.

Schemas im Objekt-Explorer

Bild 1: Schemas im Objekt-Explorer

Klicken Sie nun mit der rechten Maustaste auf den Eintrag Schemas, erscheint ein Kontextmenü, das unter anderem den Befehl Neues Schema… anbietet. Damit öffnen Sie nun den Dialog zum Anlegen eines neuen Schemas namens Schema – Neu. Hier geben Sie im Bereich Allgemein nun zunächst den Namen des Schemas ein, also Bestellannahme, und als Schemabesitzer dbo (siehe Bild 2). Das bedeutet, dass der Besitzer des Schemas identisch ist mit dem Besitzer der Datenbank.

Anlegen eines neuen Schemas

Bild 2: Anlegen eines neuen Schemas

Danach wechseln Sie zum Bereich Berechtigungen. Hier finden Sie die Schaltfläche Suchen…, mit der Sie einen weiteren Dialog namens Benutzer oder Rollen auswählen öffnen. Dieser bietet wiederum eine Schaltfläche namens Durchsuchen… an, mit der Sie den Dialog Nach Objekten suchen öffnen können. Hier werden alle Anmeldungen aufgeführt, die für den aktuellen SQL Server angelegt wurden (siehe auch Beitrag Berechtigungen für Access-Objekte per SQL Server III: Anwenden, www.access-im-unternehmen.de/1185).

Darunter finden Sie auch die Anmeldung []\Bestellannahme, die wir durch das Setzen eines Hakens zum Hinzufügen markieren (siehe Bild 3).

Auswählen der Benutzer des Schemas

Bild 3: Auswählen der Benutzer des Schemas

Danach finden Sie im Dialog Schema – Neu den gewählten Datenbankbenutzer, also die Gruppe Bestellannahme, in der Liste der Benutzer oder Rollen.

Im Bereich darunter werden die expliziten Berechtigungen für diese Anmeldung angezeigt. Aktuell sind noch keine Berechtigungen markiert, aber das holen wir nun nach – dazu setzen Sie einen Haken in der Spalte Erteilen für die folgenden Berechtigungen:

  • Aktualisieren (UPDATE),
  • Ausführen (EXECUTE)
  • Auswählen (SELECT),
  • Einfügen (INSERT) und
  • Löschen (DELETE).

Vielleicht fällt Ihnen in der Liste noch der Eintrag ändern auf, dies bezieht sich aber nicht auf das ändern von Daten – hierzu verwenden wir die Berechtigung Aktualisieren (siehe Bild 4).

Festlegen der Berechtigungen für das Schema Bestellannahme

Bild 4: Festlegen der Berechtigungen für das Schema Bestellannahme

Wenn Sie nun auf OK klicken, wird das neue Schema angelegt, das dann auch gleich in der Liste der Schemas im Objekt-Explorer erscheint. Die Benutzer der Windows-Gruppe Bestellannahme, die über die Anmeldung dem Schema zugeordnet wurden, können nun auf die Elemente dieses Schemas zugreifen. Wenn ein Windows-Benutzer als neuer Benutzer zu dieser Windows-Benutzergruppe hinzugefügt wird, kann er ebenfalls auf die Elemente des Schemas zugreifen.

Objekte zu Schema hinzufügen

Andersherum greifen die Mitglieder der Windows-Benutzergruppe Bestellannahme automatisch auf alle Tabellen, Sichten, gespeicherte Prozeduren und andere Elemente zu, die im Kontext des Schemas erstellt werden. Bisher allerdings gehören noch keine Elemente zu diesem Schema, was wir auch kurz ausprobieren können.

Wenn die Datenbank Suedsturm_SQL die Benutzergruppe Bestellannahme bereits enthielt, müssen Sie diese alle Berechtigungen an der Datenbank Suedsturm_SQL entziehen, also nicht nur die Berechtigungen, die im Dialog Datenbankbenutzer für die Anmeldung Bestellannahme festgelegt waren, sondern auch die Mitgliedschaften in anderen Schemas wie db_datareader oder db_datawriter.

Wenn Sie sich im Kontext eines der Benutzer der Windowsgruppe Bestellannahme wie etwa Harry Klein den SQL Server Management Studio starten anmelden, sollte für diesen Benutzer zu diesem Zeitpunkt noch nicht einmal eine der Tabellen der Datenbank Suedsturm_SQL zu sehen sein. Dies sollte sich erst ändern, wenn Sie dem Schema eine Tabelle hinzufügen. Der wichtige Unterschied gegenüber dem bisherigen Hinzufügen einer Tabelle ist, dass wir nun statt dbo als Objektbesitzer den Namen des Schemas angeben, hier also Bestellannahme:

CREATE TABLE Bestellannahme.tblTest
(
     TestID int IDENTITY(1,1) PRIMARY KEY,
    Testfeld nvarchar(max)
)

Anschließend fügen wir noch ein paar Datensätze zu der neuen Tabelle hinzu:

INSERT INTO Bestellannahme.tblTest(Testfeld)
VALUES(''''Test1''''), (''''Test2''''), (''''Test3'''')

Wenn wir nun wieder im Kontext des Benutzers Harry Klein beziehungsweise der Benutzergruppe Bestellannahme auf die Tabellen der Datenbank zugreifen, sollte die neue Tabelle dort im Objekt-Explorer erscheinen.

Und genau das ist der Fall: Es erscheint genau diese eine Tabelle und wir können auch im Kontext dieses Benutzers über das Schema auf die Daten dieser Tabelle zugreifen (siehe Bild 5).

Zugriff auf die Daten des Schemas

Bild 5: Zugriff auf die Daten des Schemas

Wenn Sie Tabelle über den Tabellenentwurf anlegen wollen, geben Sie den Namen des Schemas über die Eigenschaft Schema des Entwurfs an (siehe Bild 6).

Angabe des Schemas im Tabellenentwurf

Bild 6: Angabe des Schemas im Tabellenentwurf

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar