SQL Server: Benutzerdefinierte Rollen

Mit SQL Server 2012 erhalten Sie die Möglichkeit, benutzerdefinierte Serverrollen zu definieren – ein großer Fortschritt für die SQL-Verwaltung.

Denny Cherry

Obwohl wir bereits seit Jahrzehnten benutzerdefinierte Datenbankrollen definieren können, um die Gewährung von Berechtigungen auf Datenbankebene zu erleichtern, gab es auf Instanzenebene stets lediglich neun feste Serverrollen (acht, wenn Sie ein Produkt vor SQL Server 2000 verwenden, die "Bulkadmin"-Rolle wurde mit SQL Server 2005 eingeführt). Jetzt, mit SQL Server 2012, können wir endlich benutzerdefinierte Serverrollen erstellen.

Dass dies bislang nicht möglich war, hat die SQL-Verwaltung oft erheblich erschwert. Was können Sie tun, wenn Sie mehreren Benutzern oder Gruppen auf Instanzenebene Rechte gewähren und diese rechte miteinander synchronisiert halten möchten? Angenommen, Sie möchten einer großen zahl von Benutzern die "View System State"-Berechtigung zuweisen, damit diese Blockierungsinformationen auf den Entwicklungsservern anzeigen können. Sie müssten diese Berechtigung jedem Benutzer und jeder Domänengruppe einzeln zuweisen.

Wenn alle Logins auf Domänen-Logins basieren, besteht der einzige Workaround darin, eine Domänen-Gruppe für alle Benutzer zu erstellen, die diese Berechtigung benötigen (möglicherweise wird auch eine Domänen-Gruppe für jeden Server benötigt, wenn die Benutzer nicht die Berechtigungen auf allen Servern erhalten). Sie könnten die Benutzer in diese Gruppe setzen, ein Login erstellen, das der Domänen-Gruppe entspricht, und dann dieser Gruppe die "View Server State"-Berechtigung auf dem Server zuweisen. Dabei müssen Sie jedoch äußerst sorgfältig vorgehen. Andernfalls kann es passieren, dass Sie Benutzern Anmelderechte zuweisen, die diese bislang nicht hatten. Möglicherweise weisen Sie Benutzern sogar Berechtigungen zu, die diese auf keinen Fall haben sollten.

Rolle mit T/SQL

Sie können eine benutzerdefinierte Serverrolle auf verschiedene Art erstellen, etwa mit T/SQL, der SQL Server Management Studio-Benutzeroberfläche oder mit Windows PowerShell. Wenn ich eine benutzerdefinierte Serverrolle mit T/SQL zu erstellen hätte, würde ich drei verschiedene Befehle verwenden. Zunächst würde die "Create Server Role"-Anweisung die benutzerdefinierte Serverrolle erstellen; anschließend würde "Alter Server Role" dieser Rolle einen Benutzer hinzufügen, und schließlich würde die "Grant"-Anweisung der Rolle die benötigten Berechtigungen gewähren.

Diese drei Anweisungen sind im nachfolgenden Code gezeigt, der die Erstellung einer benutzerdefinierten Serverrolle mit der Bezeichnung "ViewServerState" illustriert. Diese spezifiziert einen Benutzer, der der Rolle "SomeFakeLogin" hinzugefügt wird, und die Rolle erhält die "View Server State"-Berechtigung. Um diese Berechtigung weiteren Benutzern zuzuweisen, müssen Sie lediglich diese Benutzer mit der "Alter Server Role"-Zeile der festen Serverrolle hinzufügen:

USE [master] GO CREATE SERVER ROLE [ViewServerState] AUTHORIZATION [sa] GO ALTER SERVER ROLE [ViewServerState] ADD MEMBER [SomeFakeLogin] GO GRANT VIEW SERVER STATE TO [ViewServerState] GO

Mit "Alter Server Role" wird ein Benutzer aus einer benutzerdefinierten Serverrolle entfernt. Anstelle der "Add Member"-Syntax verwenden Sie dazu "Drop Member":

ALTER SERVER ROLE [ViewServerState] DROP MEMBER [SomeFakeLogin] GO

Wenn Sie dazu übergehen, eine oder mehrere benutzerdefinierte Serverrollen für mehrere Instanzen von SQL Server zuzuweisen, haben Sie eine Reihe von Optionen: Sie möchten sich wahrscheinlich nicht mit den Servern einzeln verbinden, um die benutzerdefinierten Serverrollen zu erstellen. Eine Möglichkeit besteht darin, das SQL Server Management Studio-Feature zu verwenden. Damit können Sie T/SQL-Skripte für mehrere Instanzen ausführen.

Sie können auch die Windows PowerShell-Komponenten von SQL Server nutzen, um neue benutzerdefinierte Serverrollen für alle Instanzen von SQL Server in ihrer Organisation bereitzustellen. (Aufgrund der vielfältigen Möglichkeiten zur Verwendung von Windows PowerShell für die Bereitstellung dieser Skripte wird dieser Vorgang in diesem Artikel nicht behandelt.)

SQL Server Management Studio

Sie können dies problemlos mit der SQL Server Management Studio-Benutzeroberfläche durchführen. Verbinden Sie sich zur Erstellung einer benutzerdefinierten Serverrolle mit der Instanz im Objekt-Explorer. Navigieren Sie im Objekt-Explorer zu InstanceName | Security | Server Roles. Klicken Sie mit der rechten Maustaste auf "Server Roles", und wählen Sie aus dem Kontextmenü "New Server Role" aus. Wenn das Fenster "New Server Role" geöffnet wird, geben Sie den Namen und den Eigentümer ("Owner") der Serverrolle an, und wählen Sie dann die "Securables" und die "Permissions", die Sie den Rolleninhabern zuweisen möchten (vgl. Abbildung 1).

Abbildung 1 Angabe der Berechtigungen, über die ein Benutzer verfügen soll

Nachdem Sie alle Felder auf der Seite "General" ausgefüllt haben, gehen Sie zur Seite "Members" (vgl. Abbildung 2), und geben Sie die SQL Server-Logins an, die die Mitglieder dieser benutzerdefinierten Serverrolle werden sollen.

Abbildung 2 Die Auswahl der Mitglieder gibt an, welche Benutzer auf diese Serverrolle zugreifen können.

Wählen Sie nach Auswahl der Rollenmitglieder die Seite "Memberships". Hier geben Sie die Serverrollen an, zu denen diese benutzerdefinierte Serverrolle als Mitglied gehört. Wenn Sie auf diesem Bildschirm eine Serverrolle angeben, haben die Benutzer in der benutzerdefinierten Serverrolle auch die Berechtigungen, die von dieser Serverrolle gewährt werden.

Wenn Sie eine benutzerdefinierte Rolle erstellen und sie zum Mitglied der festen Serverrolle "Serveradmin" machen wollen (vgl. Abbildung 3), sind nicht alle Mitglieder der benutzerdefinierten Serverrolle automatisch Mitglieder der festen Serverrolle "Serveradmin". Wie bei der Verschachtelung von Domänen-Gruppen oder Datenbankrollen müssen Sie auch bei der Verschachtelung von Rollen sehr sorgfältig vorgehen, damit Benutzer keine Berechtigungen erhalten, über die sie nicht verfügen sollten.

Abbildung 3 Sie können Ihre benutzerdefinierten Rollen auf andere Serverrollen anwenden.

Zur Verschachtelung von Serverrollen mit T/SQL müssen Sie nach wie vor die "Alter Server Role"-Anweisung mit der "Add Member"-Syntax verwenden. Zum Beispiel: Um die benutzerdefinierte Serverrolle "ViewServerState" zum Mitglied der festen Serverrolle "Setupadmin" zu machen, müssen Sie die feste Serverrolle "Setupadmin" verändern. Dann fügen Sie die benutzerdefinierte Serverrolle "ViewServerState" als Mitglied hinzu:

ALTER SERVER ROLE [setupadmin] ADD MEMBER [ViewServerState] GO

Benutzerdefinierte Serverrollen können für die verschiedensten Zwecke genutzt werden. Es gibt Dutzende von Berechtigungen auf Instanzenebene, die Sie einer benutzerdefinierten Serverrolle zuweisen können, um die Verwaltung dieser Berechtigungen zu vereinfachen. Sie können auch eine "Junior DBA"-Rolle erstellen, die einige Berechtigungen, jedoch keine vollständigen Administratorrechte, gewährt. Sie können eine "AlwaysOnAdmin"-Gruppe einrichten, die Failover-Rechte für eine AlwaysOn-Datenbank gewährt (dies muss aus SQL Server heraus geschehen), ohne vollständige Administratorrechte zu gewähren.

Es gibt viele verschiedene Anwendungsmöglichkeiten für benutzerdefinierte Serverrollen. Diese können den Verwaltungsaufwand erheblich vereinfachen. Sie erhöhen auch die Sicherheit von SQL Server-Instanzen, da diese neuen Serverrollen dafür sorgen, dass seltener nicht erwünschte Berechtigungen gewährt werden.

DennyCherry

Denny Cherry verfügt über mehr als zehn Jahre Erfahrung mit der Verwaltung von SQL Server. Er verfügt über eingehende Kenntnisse auf den Gebieten Systemarchitektur, Performance Tuning und Fehlerbehebung. Er besitzt verschiedene Zertifizierungen im Zusammenhang mit SQL Server, darunter den Microsoft Certified Master for SQL Server 2008. Er ist seit mehreren Jahren Microsoft SQL Server MVP und der Verfasser zahlreicher technischer Artikel und Bücher zum SQL Server-Management und zur Integration von SQL Server mit anderen Technologien.

Verwandter Inhalt