Hinzufügen des Prinzipal-Objekts ‚Benutzername‘ ist nicht möglich, weil das Objekt nicht vorhanden ist oder Sie nicht die erforderliche Berechtigung haben

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.

ist nicht möglich, weil das Objekt nicht vorhanden ist oder Sie nicht die erforderliche Berechtigung haben - SSMS - Anmeldeeigenschaften - Benutzerzuordnung - Skript für Aktion

Links

  1. https://stackoverflow.com/questions/42570530/alter-role-db-owner-add-member-a-doesnt-work/42579160
  2. https://stackoverflow.com/questions/7232559/sql-server-giving-loginsusers-db-owner-access-to-database

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert