SQL Server 2008 R2-Fehler: 15023, Benutzer, Gruppe oder Rolle sind bereits vorhanden

16

Ich habe eine Testdatenbank, mit der ich Berechtigungsprobleme habe.
Ich kann nicht auf die Berichtsdatenbank zugreifen. In der Hilfedokumentation der Anwendung wird Folgendes angegeben:

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

Wenn ich das tue, erhalte ich die folgende Fehlermeldung:

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

Ich habe diesen Fehler gegoogelt und den folgenden Befehl für jede Datenbank ausprobiert:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

Die Meldung zeigte an, dass die Befehle erfolgreich ausgeführt wurden, aber der obige Fehler weiterhin angezeigt wird, wenn ich versuche, jede Datenbank wie oben beschrieben zuzuordnen.

Was vermisse ich?

Per Kins Kommentar (danke) Ich habe Folgendes versucht: - Ich habe mit der rechten Maustaste auf den Benutzer geklickt und Folgendes ausgewählt: Skriptanmeldung als> Ablegen und Erstellen in> Neues Abfragefenster. - Ich habe die resultierende Abfrage ausgeführt und versucht, die Benutzerrollen zuzuordnen, indem ich die beiden anderen Datenbanken und db_owner erneut auswählte. Es wird jedoch weiterhin die gleiche Fehlermeldung wie oben angezeigt.

Gedanken??

brl8
quelle

Antworten:

12

Sie können eine Reihe von Dingen ausprobieren, und der Erfolg der einzelnen hängt wahrscheinlich davon ab, welche Serverrolle Sie haben.

Wenn es sich ehrlich gesagt nur um einen oder zwei Benutzer handelt, besteht der einfachste Weg darin, den Datenbankbenutzer aus der wiederhergestellten Datenbank zu entfernen. Wenn bereits eine Serveranmeldung vorhanden ist, ordnen Sie den Datenbankbenutzer der Serveranmeldung mit SSMS erneut zu. Wenn die Serveranmeldung nicht vorhanden ist, erstellen Sie sie einfach, ordnen Sie den Benutzer zu und presto! Weg gehen wir.

Nächste Option: Wenn Sie eine große Anzahl von Benutzern migrieren, verwenden Sie sp_help_revlogin. sp_help_revlogin ist eine von Microsoft bereitgestellte gespeicherte Prozedur, mit der Anmeldungen, einschließlich Kennwörtern und SIDs, von einem Server auf einen anderen migriert werden können. Hier ist ein guter Artikel darüber SP_HELP_REVLOGIN

Cougar9000
quelle
Siehe support.microsoft.com/en-us/kb/918992 Übertragen von Anmeldungen und Kennwörtern zwischen Instanzen von SQL Server
James Jenkins
3

Ich benutze Auto_Fix mit sp_change_users_loginin meiner dev Umgebung solche Probleme (Fehler 15023) zu beheben. Vermeiden Sie die Verwendung von Auto_Fix in sicherheitsrelevanten Situationen.

Auto_Fix: Verknüpft einen Benutzereintrag in der Systemkatalogansicht sys.database_principals in der aktuellen Datenbank mit einem gleichnamigen SQL Server-Anmeldenamen. Existiert kein gleichnamiger Login, wird einer angelegt. Untersuchen Sie das Ergebnis der Auto_Fix-Anweisung, um sicherzustellen, dass tatsächlich die richtige Verknüpfung hergestellt wurde. Vermeiden Sie die Verwendung von Auto_Fix in sicherheitsrelevanten Situationen.

sp_change_users_login 'AUTO_FIX', 'myuser'

Beachten Sie außerdem, dass dieses Feature möglicherweise in einer zukünftigen Version von Microsoft SQL Server entfernt wird.

Weitere Referenzen:

  1. SQL Server 2008-Benutzer, -Gruppe oder -Rolle sind in der aktuellen Datenbank bereits vorhanden
  2. UPDATE: Fehler 15023: Benutzer ist bereits in der aktuellen Datenbank vorhanden
  3. SQL ordnet eine Anmeldung einem vorhandenen Benutzer zu
LCJ
quelle
0
ALTER USER [<username>] WITH LOGIN=[<username>]

Ist der richtige Ansatz.

Ansonsten gehe zu:

Sicherheit> Anmeldungen> (Ihr Benutzername)> Eigenschaften> Benutzerzuordnung

Bildbeschreibung hier eingeben

und ordnen Sie diesen Benutzer der gewünschten Datenbank zu.

Sie können die folgende Abfrage im Kontext Ihrer Datenbank verwenden, um nach Waisen zu suchen:

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name
Francesco Mantovani
quelle
-4

Gehen Sie zur Master-Datenbank und löschen Sie den Benutzer

user84866
quelle