Das Login hat bereits ein Konto unter einem anderen Benutzernamen


29

Wenn ich diese SQL ausführe:

USE ASPState
GO
IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser')
CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser];
GO

Ich erhalte folgenden Fehler:

Das Login hat bereits ein Konto unter einem anderen Benutzernamen.

Woher weiß ich, was dieser andere Benutzername für mein Anmeldekonto ist?

Antworten:


31

Dies bedeutet, dass die Anmeldung [R2Server \ AAOUser] bereits einem Benutzer in dieser Datenbank zugeordnet ist. Mit anderen Worten, ein anderer Datenbankbenutzer verwendet dieses Login. Mit der folgenden Abfrage können Sie sehen, welcher Datenbankbenutzer Ihr Login verwendet:

use YourDB
go
SELECT su.name as DatabaseUser
FROM sys.sysusers su
join sys.syslogins sl on sl.sid = su.sid
where sl.name = 'test' -- login

PS: Eine Version des Skripts, die die Kompatibilitätsansichten nicht verwendet:

Select sp.name as LoginName, sp.type_desc as LoginType,
    dp.name as DBUser, dp.type_desc as UserType
from sys.server_principals sp
join sys.database_principals dp on dp.sid = sp.sid
where sp.name = 'test' -- your login

Ok, ich sehe den dboangezeigten Wert . Merkwürdig, ich erinnere mich nicht, dass ich das dbofür meinen Account verwendet habe R2Server\AAOUser. Ich überlege, was ich als nächstes tun soll.
Jack

4
Haben Sie die Datenbank mit diesem Login erstellt, um eine Verbindung zum Server herzustellen? Wenn ja, sind Sie der Datenbankbesitzer und müssen keinen weiteren Benutzer erstellen. Du bist schon fertig.
Marian

Eigentlich habe ich den Befehl verwendet aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssadd, um die ASPStateDatenbank zu erstellen . Ich denke wahrscheinlich, ich bin bereits festgelegt, obwohl ich es überhaupt nicht merke.
Jack

Ratet mal was: "-E -> Mit aktuellen Windows-Anmeldeinformationen authentifizieren." :-)
Marian

4
Ich würde sys.server_principalsund verwenden sys.database_principals. sysusersund sysloginssind nur für die Abwärtskompatibilität da.
Aaron Bertrand

4

Es ist eine 'Metadatensache' ...

Manchmal wird der Datenbankbenutzer im Laufe dessen, was in dieser Datenbank vor sich geht, "beschädigt". (Ich habe ein ähnliches Verhalten festgestellt, wenn die Datenbank wiederhergestellt wird und die Rollen in der wiederhergestellten Kopie sich von denen unterscheiden, die Sie überlagert haben. Aus diesem Grund habe ich es nachfolgend versucht, wodurch das Problem für mich behoben wurde.)

  1. Öffnen Sie die Anmeldeeigenschaften in SSMS -> (Sicherheit | Anmeldungen | Fehlgeschlagene Benutzer- ID | Eigenschaften | Benutzerzuordnung). Sie werden wahrscheinlich sehen, dass die Datenbank bereits überprüft wurde und Rollen zugewiesen wurden (wie völlig normal).

  2. Notieren Sie sich die Berechtigungen für die Datenbank, die den Fehler angibt, nur als Referenz.

  3. Deaktivieren Sie diese Datenbank und speichern Sie die Anmeldung.
  4. Führen Sie nun Ihre Abfrage erneut aus, um die Anmeldung / Rolle in die Ziel-DB aufzunehmen. Es sollte gut funktionieren.

2
Wenn ich zu Schritt 3 komme, Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
erhalte

Ich habe auch die Cannot drop the user 'dbo'.Fehlermeldung bekommen. Ich lief dieses Skript, das die problematische Benutzerzuordnung entfernt und das Problem behoben: USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]. Für weitere Informationen ist dies die Quelle, die ich verwendet habe: blog.sql-assistance.com/index.php/cannot-drop-the-user-dbo
SherlockSpreadsheets
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.