SQL Server-Berechtigungen zum Erstellen, Wiederherstellen und Löschen nur einiger Datenbanken

17

Unter MS SQL Server 2008 R2 muss ein Benutzer vorhanden sein, der DBCC CHECKDB erstellen, wiederherstellen und anschließend Datenbanken löschen kann. Er darf jedoch aus Sicherheitsgründen nicht auf bestimmte Datenbanken auf dem Server zugreifen oder diese löschen können. Ist dieses Setup möglich?

Cicik
quelle
Hier erhalten Sie einige Hinweise: toadworld.com/platforms/sql-server/w/wiki/…
dezso

Antworten:

27

Ja, es ist durch ein paar Berechtigungen möglich.

Zum Erstellen einer Datenbank müssen Sie zunächst die Berechtigung auf Serverebene erteilen Create Any Database. Diese Berechtigung macht genau das, wonach es sich anhört - die Möglichkeit, eine Datenbank zu erstellen. Beachten Sie, dass dies dem Login nicht die feste Serverrolle von dbcreator verleiht, da diese feste Serverrolle Änderungs- / Löschberechtigungen für jede Datenbank erteilt. Create Any DatabaseErlaubt dem Login, dass er nur die Macht über die Datenbanken hat, die er besitzt. Dies gibt auch die Möglichkeit zur Wiederherstellung.

( Wenn Sie also NUR "Create Any Database" (Beliebige Datenbank erstellen ) ausführen, können Sie eine neue Datenbank erstellen. Sie können jedoch keine Datenbank löschen oder ändern , die Sie mit der festen Serverrolle "dbcreator" erhalten würden.)

So erteilen Sie die Berechtigung "Beliebige Datenbank erstellen":

use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO

Für das Ausführen DBCC CHECKDBund Löschen von Datenbanken ist die feste Datenbankrolle db_owner ausreichend. Dies gewährt alles, was Sie anfordern. Bitte beachten Sie: Sie gewähren diesem Benutzer auch die Möglichkeit, mit auszuwählen, zu löschen, abzuschneiden, zu aktualisieren und einzufügen db_owner. Ich stelle mir das gerne in sysadmineiner Datenbank vor.

Sie wenden diese Berechtigung nur auf die Datenbank an, für die Sie diese Funktion aktivieren möchten. Auf diese Weise können Sie steuern, welche Datenbanken der Benutzer ablegen, wiederherstellen oder überprüfen kann. Alle Datenbanken, für die Sie dem Benutzer diese Berechtigungen nicht erteilt haben, sind vor dem Ausführen dieser Aktionen durch diesen Benutzer geschützt

Dazu ordnen Sie zuerst die Anmeldung einem Datenbankbenutzer zu:

USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName] 
GO

Fügen Sie dann diesen Benutzer der db_ownerRolle hinzu (funktioniert in SQL Server 2012 und höher):

ALTER ROLE [db_owner] ADD MEMBER [frank]
GO

Für SQL Server 2008 müssten Sie die gespeicherte Systemprozedur verwenden, um ein Rollenmitglied als Kommentar hinzuzufügen.

EXEC sp_addrolemember 'db_owner', 'frank';

Sie können dies alles auch über die GUI tun. Die Anmeldeinformationen, die Sie über den Sicherheitsordner in SSMS auf Instanzebene vornehmen würden: Klicken Sie mit der rechten Maustaste auf Login -> Eigenschaften -> Securables. Für die Datenbankebene würden Sie dies über den Sicherheitsordner auf Datenbankebene tun: Klicken Sie mit der rechten Maustaste und wählen Sie einen neuen Benutzer aus -> wählen Sie das Login, das Sie als Benutzer verwenden möchten, aus der Liste der Serveranmeldungen aus / geben Sie dem Datenbankbenutzer einen Namen -> gehen Sie zu Wählen Sie auf der Registerkarte Mitgliedschaft die Rollenmitgliedschaft aus.

Das Hilfesystem von SQL Server, die Onlinedokumentation, ist auch für die meisten Fragen zu Berechtigungen eine hervorragende Ressource - wenn Sie feststellen, dass Sie andere Berechtigungen zuweisen müssen. Suchen Sie einfach nach dem T-SQL-Befehl, dem Sie Berechtigungen erteilen möchten. In der Regel enthält der Artikel einen Abschnitt Berechtigungen für diesen Befehl, in dem Sie erfahren, welche Berechtigungen für diese Aktion erforderlich sind. Sie können sich den Artikel für DBCC CHECKDB als Beispiel ansehen - ungefähr 7/8 des Artikels ist der Berechtigungsabschnitt.

Mike Walsh
quelle
3
Ich möchte nur hinzufügen, dass dies ALTER ROLE [db_owner] ADD MEMBER [frank]nur mit SQL Server 2012 funktioniert. Wenn Sie mit SQL Server 2008 arbeiten, sollten Sie den SP verwenden: EXEC sp_addrolemember 'db_owner', 'frank';(
siehe