Bis dato war es nicht möglich die Serverrollen, ähnlich wie Datenbankrollen, selbst zu definieren. Das hat sich mit SQL Server Denali geändert.
So lassen sich nun Serverrollen mit eigens definierten anlegen, um so den Support gezielt ein reduziertes Rechtepaket zu zuweisen. Beispielsweise könnte man verschiedene Ebenen des Supports abbilden (1.Level, 2nd Level etc.)
Besonderen Gefallen hatte ich an der Möglichkeit gezielt auf Endpunkten Rechte (Spiegelung Error 1418) zu vergeben oder etwa die Anzeige von Datenbanken zu unterbinden.
Die Serverrollen können natürlich auch per Skript erstellen und vergeben werden:
--Neues Login USE [master] GO CREATE LOGIN [Sepp] WITH PASSWORD=N'ncc1701-d', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF GO --Endpunkt für Spiegelung CREATE ENDPOINT Endpoint_Mirroring STATE=STARTED AS TCP (LISTENER_PORT=5022) FOR DATABASE_MIRRORING (ROLE=ALL); --Neue Serverrolle USE [master] GO CREATE SERVER ROLE [Supper_Level1] GO GRANT VIEW ANY DATABASE TO [Supper_Level1] GO GRANT CONNECT SQL TO [Supper_Level1] GO DENY SHUTDOWN TO [Supper_Level1] go GRANT CONNECT ON ENDPOINT::[Endpoint_Mirroring] TO [Supper_Level1] --Anmeldung zu Serverrolle hinzufügen
ALTER SERVER ROLE
[Support_Level1]
ADD MEMBER
[SEPP]
Eine Anmeldung kann durchaus in mehreren Serverrollen enthalten sein:
Beispielsweise kann der User Sepp lediglich seinen eigenen Systemprozess sehen und nur die Systemdatenbanken master und tempdb.
Sofern der User Sepp zu der Serverrolle Support_Level1 gehört, darf er zumindest alle Datenbanken und Systemprozesse sehen.
Falls ein Benutzer Aktionen ausführt, auf die ihm kein Recht gegeben erteilt wurden, quittiert dies der SQL Server mit:
Der Benutzer besitzt nicht die Berechtigung zum Ausführen dieser Aktion.