2009-08-27 10 views
10

Jakiś czas temu ustawiłem bazę danych pod SQL Server 2008 o nazwie myDB w Windows XP, a następnie pod Loginy pod serwerem, kliknąłem Właściwości na moim komputerze nazwa logowania COMP23/Andrew i zmapowałem myDB bazy danych do tego przy użyciu dbowner jako jego prawa.Problem z mapowaniem użytkownika w SQL Server 2008

Następnie sklonowałem tę instalację XP jako kopię zapasową, zainstalowałem Visa, zdając sobie sprawę, że nie chcę, aby Vista ponownie odtworzyła moją oryginalną kopię XP na tym samym komputerze. Jednak mapowanie bazy danych jest naprawdę zdezorientowane! Zasadniczo pod loginem serwera COMP23 \ Andrew, jest napisane, że jest on mapowany na myDB, ale kiedy klikam myDB i patrzę na jego użytkowników, nie ma go. Myślę, że stracił on swoje mapowanie SID, ponieważ myśli, że jest to nowa maszyna.

Pod loginem do serwera COMP23 \ Andrew Nie mogę usunąć mapowania do myDB, ponieważ kiedy to zrobię, mówi "Nie mogę upuścić użytkownika dbo". Nie mogę też zmienić użytkownika dbo - nie pozwala mi. Ale nie mogę również sprawić, że użytkownik pojawi się pod użytkownikami myDB! Co oznacza, że ​​nie mogę zalogować się za pomocą ustawień mojej strony internetowej (asp.net web.config)! Kiedy się loguję, po prostu nie mogę otworzyć bazy danych "myDB" żądanej przez login. Logowanie nie powiodło się. Logowanie nie powiodło się dla użytkownika "COMP23 \ ASPNET"

Jakieś pomysły? Jak mogę zmienić to poprawnie? Próbowałem nawet ponownie zainstalować program SQL Server 2008, ale nazwa komputera jest nadal mapowana do bazy danych.

Odpowiedz

14

Ponieważ dbo jest właścicielem bazy danych, jej odwzorowanie musi być zmieniony poprzez zmianę właściciela bazy danych:

ALTER AUTHORIZATION ON database::[<yourdb>] TO [sa]; 
+0

Rozwiązanie to działa na mnie. Dzięki Remus! Miałem taką sytuację: domena \ oldusr nie działa już w naszej firmie. domena \ oldusr zamapowana jako "dbo" (patrz pod mapowania użytkownika) dla kilku baz danych. To powodowało problemy, gdy próbowałem użyć kreatora Zadania> "Kopiuj bazę danych", aby skopiować DB z komputera do innego. Otrzymałem ten błąd: Nie mogę znaleźć głównej domeny 'oldusr', ponieważ ona nie istnieje lub nie masz uprawnień. Uruchomienie powyższej kwerendy spowodowało odrzucenie mapowania użytkownika (jako dbo) z tego DB. Ostatecznie mogłem skopiować DB używając Zadania> Kopiuj bazę danych. – firepol

0

Skoro wspomniałeś o SID mapowania problem, czy próbowałeś za pomocą sp_change_users_login? Użyj opcji autofix, aby ponownie zmapować swój login na ten w bazie danych.

Dla powyższego przykładu należy wykonać następujące czynności podczas połączenia z bazą danych

EXEC `sp_change_users_login` @Action = 'autofix', @LoginName = 'COMP23\ASPNET' 
2

Przede wszystkim, nie można mieć cudzysłowy wokół zapisaną nazwę procedury. Po drugie, nie jest to autofix, ale auto_fix.

Wreszcie, gdy zostaną wykonane te korekty, zostanie wyświetlony następujący komunikat o błędzie:

Msg 15600, Level 15, State 1, Procedure sp_change_users_login, Line 181 An invalid parameter or option was specified for procedure 'sys.sp_change_users_login'.

po uruchomieniu tego polecenia:

EXEC sp_change_users_login @Action = 'auto_fix', @LoginName = '<your username>' 
0
USE [Database] 
GO 

ALTER USER [dbo] WITH NAME=[username] 
GO 

sp_changedbowner 'sa' 
GO 
+0

Chociaż ten fragment kodu może rozwiązać pytanie, [w tym wyjaśnienie] (http://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers) naprawdę pomaga poprawić jakość twojego stanowisko. Pamiętaj, że odpowiadasz na pytanie przeznaczone dla czytelników w przyszłości, a te osoby mogą nie znać powodów sugestii dotyczących kodu. –