Versucht man z.B. per „Microsoft SQL Server Management Studio“ (SSMS) oder per PowerShell (PS) einem Datenbankbenutzer eine Datenbanrolle zuzuweisen, dann werden (je nach eingestellter Sprache) folgende Fehlermeldungen ausgegeben:
Meldung 15151, Ebene 16, Status 1, Zeile 1
Hinzufügen des Prinzipal-Objekts ‚Benutzername‘ ist nicht möglich, weil das Objekt nicht vorhanden ist oder Sie nicht die erforderliche Berechtigung haben.
Msg 15151, Level 16, State 1, Line 1
Cannot alter the role ‚Username‘, because it does not exist or you do not have permission.
Inhalt
Beschreibung
In unserem Fall haben wir versucht, einem Domänenbenutzer die Datenbankrolle „db_owner“ per PowerShell- bzw. SQL-Skript mit folgendem SQL-Kommando zu zuzuweisen.
use [DB_Name]; ALTER ROLE db_owner ADD MEMBER [Domain\User];
Fehlermeldungen
Meldung 15151, Ebene 16, Status 1, Zeile 1
Hinzufügen des Prinzipal-Objekts ‚Domäne\Benutzername‘ ist nicht möglich, weil das Objekt nicht vorhanden ist oder Sie nicht die erforderliche Berechtigung haben.
Msg 15151, Level 16, State 1, Line 1
Cannot alter the role ‚Domain\Username‘, because it does not exist or you do not have permission.
Ausnahme beim Aufrufen von "ExecuteNonQuery" mit 0 Argument(en): "Hinzufügen des Prinzipal-Objekts 'Domäne\Benutzername' ist nicht möglich, weil das Objekt nicht vorhanden ist oder Sie nicht die erforderliche Berechtigung haben. Der Datenbankkontext wurde in 'DB_Name' geändert." In Zeile:125 Zeichen:5 $SqlCmd.ExecuteNonQuery() | Out-Null~~~~~~~~ CategoryInfo : NotSpecified: (:) [], MethodInvocationException FullyQualifiedErrorId : SqlException
Lösung
Versuch nicht erfolgreich
Es ist zwar möglich, mit dem alten Befehl (wird in Zukunft nicht mehr unterstützt) die DB-Rolle „db_owner“ zuzuweisen (in SSMS der untere Haken), aber die Zuordnung des Benutzers (Mapping) zur Datenbank (in SSMS der obere Haken) findet nicht statt.
-- db_owner wird zugewiesen, aber DB-Mapping findet nicht statt use [DB_Name]; EXEC sp_addrolemember 'db_owner', 'Domain\User';
Lösung – Vorher CREATE USER FOR LOGIN
Der korrekte Aufruf muss wie folgt lauten.
Die Zeile mit „CREATE USER“ ist hier relevant.
use [DB_Name]; CREATE USER [Domain\User] FOR LOGIN [Domain\User]; use [DB_Name]; ALTER ROLE db_owner ADD MEMBER [Domain\User];
Tipp
Es ist möglich, die Aktion in der SSMS-GUI als SQL Skript auszugeben. Dafür die gewünschten Änderungen durchführen, dann oben links auf „Skript“ klicken und in die neue Abfrage oder Zwischenablage ausgeben.