Login ma już konto pod inną nazwą użytkownika


29

Kiedy wykonuję ten SQL:

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

Otrzymuję następujący błąd:

Login ma już konto pod inną nazwą użytkownika.

Skąd mam wiedzieć, jaka jest inna nazwa użytkownika dla mojego konta logowania?

Odpowiedzi:


31

Oznacza to, że login [R2Server \ AAOUser] jest już zamapowany na użytkownika w tej bazie danych. Innymi słowy, inny użytkownik bazy danych używa tego loginu. Możesz sprawdzić, który użytkownik bazy danych używa Twojego loginu za pomocą następującego zapytania:

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: wersja skryptu, która nie korzysta z widoków zgodności:

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, widzę wyświetlaną wartość dbo. Dziwne, nie pamiętam, że korzystam z dbomojego konta R2Server\AAOUser. Zastanawiam się, co powinienem zrobić dalej.
Jack

4
Czy utworzyłeś bazę danych, używając tego loginu do połączenia z serwerem? Jeśli tak, to jesteś jego właścicielem bazy danych i nie musisz tworzyć innego użytkownika. Jesteś już ustawiony.
Marian

Właściwie użyłem polecenia aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssadddo stworzenia ASPStatebazy danych. Myślę, że prawdopodobnie jestem już ustawiony, chociaż nawet nie zdaję sobie z tego sprawy.
Jack

Zgadnij, co: „-E -> Uwierzytelnij przy użyciu aktualnych poświadczeń systemu Windows”. :-)
Marian

4
Chciałbym użyć sys.server_principalsi sys.database_principals. sysusersi sysloginssłużą tylko kompatybilności wstecznej.
Aaron Bertrand

4

To „metadane” ...

Czasami użytkownik bazy danych zostaje „skorumpowany” w trakcie tego, co dzieje się w tej bazie danych. (Widziałem podobne zachowanie, jeśli DB zostanie przywrócone, a role w przywróconej kopii różnią się od tej, którą zawierałeś. Właśnie dlatego próbowałem poniżej, co rozwiązało problem dla mnie.)

  1. Otwórz właściwości logowania w SSMS -> (Zabezpieczenia | Logowanie | brak identyfikatora użytkownika | Właściwości | Mapowanie użytkownika). Prawdopodobnie zobaczysz, że DB jest już sprawdzone i ma przypisane Role (jak całkowicie normalne).

  2. Zwróć uwagę na uprawnienia do DB, podające błąd, tylko w celach informacyjnych.

  3. Odznacz ten DB i zapisz login.
  4. Teraz ponownie uruchom zapytanie, aby dodać login / rolę do docelowej bazy danych. Powinno działać dobrze.

2
kiedy przechodzę do kroku 3, otrzymuję:Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
bkwdesign

Dostałem również Cannot drop the user 'dbo'.komunikat o błędzie. Pobiegłem ten skrypt, który usuwa problematyczną odwzorowania użytkownika i stały problem: USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]. Aby uzyskać więcej informacji, wykorzystałem to źródło: blog.sql-assistance.com/index.php/cannot-drop-the-user-dbo
SherlockSpreadsheets
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.