Problem polega na tym, że przywracanie przywraca użytkowników bazy danych z oryginalnej instancji serwera, ale nowa instancja zazwyczaj nie wie nic o tych logowaniach użytkowników. Zobaczysz je w obszarze Bezpieczeństwo na poziomie bazy danych, ale nie mają odpowiednich danych logowania na poziomie serwera.
Musisz ponownie podłączyć użytkowników bazy danych przy użyciu loginów serwera do instancji, w której przywrócono bazę danych.
Jest na to kilka sposobów:
Utwórz dla nich nowe dane logowania w nowej instancji. Następnie musisz usunąć ich jako użytkowników bazy danych w nowej instancji i dodać ich nowe dane logowania. Wydaje się to dziwne, biorąc pod uwagę, że możesz utworzyć te same nazwy logowania, ale identyfikatory SID (identyfikatory zabezpieczeń) będą różne i to właśnie SQL używa do identyfikacji użytkownika. Jest to dość łatwe dla jednego lub dwóch loginów.
Jeśli chcesz zachować tych samych użytkowników, zachowując te same identyfikatory SID, we wszystkich instancjach, użyj procedury składowanej sp_help_revlogin . Skopiuj kod z linku, który utworzy niezbędne procedury składowane i uruchom go na serwerze, z którego chcesz skopiować użytkowników. Wygeneruje skrypt SQL, który można uruchomić na serwerze docelowym, aby utworzyć tych samych użytkowników, którzy przenoszą identyfikatory SID, hasła i wszystko. Jest to odpowiedni sposób, jeśli masz wielu użytkowników bazy danych, musisz ponownie połączyć się z instancją docelową lub nie znasz haseł do jednego lub większej liczby loginów SQL w instancji źródłowej.
EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';
zamiast tego. :)Oto co znalazłem.
Jak wyszedł Squillman, użytkownicy są kopiowani z bazą danych, ale loginy nie. Istnieje procedura sklepu o nazwie sp_change_users_login, której można użyć do rozwiązania problemu. Kroki, aby to zrobić, są szczegółowo opisane w tym artykule . Szczegóły dotyczące korzystania z procedury sklepu można znaleźć na tej stronie .
źródło
Począwszy od SQL Server 2012, istnieje polecenie T-SQL, aby przypisać istniejących użytkowników do nowych danych logowania. Utwórz login, ale nie próbuj dokonywać mapowań użytkowników (to się nie powiedzie). Następnie wykonaj:
Spowoduje to zamapowanie istniejącego loginu na nowego użytkownika. Dokumentacja SQL tutaj: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017
źródło