Jak w SQL Server mogę utworzyć login dla istniejącego użytkownika?

17

Przywróciłem bazę danych z jednej instancji SQL Server do innej instancji SQL Server. Baza danych już ma dodanych użytkowników. Ale nie mają loginów do nowej instancji SQL Server.

Wiem, jak utworzyć nowe dane logowania dla nowych użytkowników, ale jak mogę utworzyć dane logowania dla istniejących użytkowników?

epotter
źródło

Odpowiedzi:

9

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:

  1. 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.

  2. 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.

squillman
źródło
10

Zawsze uruchomić sp_change_users_login polecenia z „Update_One” działania do ponownego połączenia użytkownik bazy danych z logowania serwera:

sp_change_users_login 'Update_One', 'database user', 'server login

Aaron Daniels
źródło
Fajnie, użyłem tego: EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';zamiast tego. :)
user2173353
Czy nie jest to możliwe tylko wtedy, gdy użytkownik loguje się zarówno do bazy danych, jak i do serwera, ale połączenie między nimi jest zerwane?
wenzzzel
2

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 .

epotter
źródło
2

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:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

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

Eryk
źródło