Kiedy nadajesz uprawnienia w SQL sererze tworzysz loginy dla użytkowników. Login może pochodzić z systemu Windows, bądź też może być utworzony specjalnie w obrębie wybranej bazy danych.
Użytkownik, który posiada własny login może się podłączyć do serwera. Aby jednak skorzystać z danych zapisanych w konkretnej bazie danych potrzebuje dodatkowo konta użytkownika w tej bazie danych. Tworzenie użytkownika polega na połączeniu (zmapowaniu) loginu do nazwy użytkownika.
Jeżeli jednak baza danych zostanie przeniesiona na inny serwer (np backup/restore), to może sie okazać, że na tym nowym serwerze nie istnieją loginy do których odwołują się konta użytkowników w bazie danych. Dotyczy to loginów tworzonych w SQL oraz pochodzących z Windows.
W przypadku loginu Windows sprawa jest stosunkowo prosta. Wystarczy utworzyć login dla użytkownika Windows, a użytkownik bazy danych zostanie zmapowany do tego konta automatycznie.
Gorzej ma się sprawa z kontami tworzonymi wewnętrzenie w SQL Server. Nawet jeżeli utworzysz login o tej samej nazwie na nowym serwerze, to mapowanie użytkownika bazy danych do loginu serwera nie odbędzie sie automatycznie. Można jednak wykonać polecenie:
ALTER USER user_name WITH LOGIN = login_name
Powoduje ono, że nazwa login_name będzie mapowana na nazwę użytkownika user_name.
A jaki z tego wniosek? Gdzie tylko można staraj się unikać kont SQL Server na rzecz loginów pochodzących z Windows (Używaj autentykacji windows).
Komentarze:
Można też procedurą składowaną:
sp_change_users_login [ @Action = ] 'action’
[ , [ @UserNamePattern = ] 'user’ ]
[ , [ @LoginName = ] 'login’ ]
[ , [ @Password = ] 'password’ ]
[;]
http://technet.microsoft.com/en-us/library/ms174378.aspx