Как перенести логины SQL Server с одного сервера на другой?

Я планирую миграцию некоторых баз данных SQL Server 2008 R2 между двумя серверами.

Предложение состоит в том, чтобы следовать методу 3 в этой статье: http://support.microsoft.com/kb/918992 для переноса логинов через после были перенесены базы данных.

Это в основном выглядит хорошо для меня, но одна проблема заключается в том, что любой из этих логинов уже существует на целевом сервере. Если это так, что-то еще нужно сделать, и если да, то что?

[Мое понимание здесь немного туманно - возможно ли, что пользователи в восстановленной базе данных все равно останутся сиротами, так как логины, на которые они ссылаются, имеют разные SID на новом сервере?]

0
nl ja de

1 ответы

Этот скрипт генерирует сценарии входа, а не выполняет инструкции напрямую, поэтому вы можете их просмотреть и просто запустить сценарии для пользователей, которые еще не существуют в целевой среде.

Сценарий будет генерировать новые идентификаторы безопасности, зависящие от того, нужен ли новый вход для нового пользователя - он зависит от типа входа.

Из MSDN по теме:

Источник SID зависит от того, как создается логин. Если   логин создается из пользователя или группы Windows, ему предоставляется Windows   SID главного источника; SID Windows уникален в пределах   домен. Если вход в SQL Server создается из сертификата или   асимметричный ключ, ему присваивается идентификатор SID, полученный из хэша SHA-1   открытый ключ. Если логин создан как старый SQL Server   login, для которого требуется пароль, сервер будет генерировать SID.

Я не думаю, что вам нужно беспокоиться об этом, если вы не используете таблицу sys.server_principals для чего-то особенного.


Из приведенных ниже комментариев Стив хотел создать логины по сценарию, а также отсоединить и повторно подключить базы данных на новом сервере. Выяснилось, что эти логины теперь будут потеряны, т. Е. Прикреплены к логину на исходном сервере с тем же именем, что и на новом сервере, но с другим SID.

Да, это будет проблемой. Чтобы отсортировать это, вам нужно посетить это Статья MSDN . Обобщить:

Чтобы обнаружить осиротевших пользователей, выполните следующие инструкции Transact-SQL:

USE ;
GO; 
sp_change_users_login @Action='Report';
GO;

В выводе перечислены пользователи и соответствующие идентификаторы безопасности (SID) в текущей базе данных, которые не связаны с регистрацией SQL Server. Для получения дополнительной информации см. sp_change_users_login ( Transact-SQL).

Чтобы разрешить осиротевшего пользователя, выполните следующую процедуру:

Следующая команда перезапускает учетную запись входа в сервер, указанную указанным пользователем базы данных.

USE ;
GO
sp_change_users_login @Action='update_one', @UserNamePattern='', 
   @LoginName='';
GO

Как указывает Стив, sp_change_users_login обесценивается, и предпочтительной альтернативой является использование ALTER USER :

ALTER USER 
WITH LOGIN 

ссылка MSDN

1
добавлено
Спасибо за Ваш ответ. Просто для объяснения немного больше, это учетные записи аутентификации SQL Server, о которых я немного беспокоюсь. Например. скажем, SOURCE_SERVER имеет логин «sqlserverauth», а пользователи в SOURCE_DATABASE связаны с этим именем «sqlserverauth». Что произойдет с этими пользователями при перенастройке SOURCE_DATABASE в TARGET_SERVER, который также имеет регистрацию «sqlserverauth» (предположительно, с другим SID?)
добавлено автор Steve Chambers, источник
В ответ на вышеприведенный комментарий пользователи все равно будут существовать, когда базы данных будут перенесены, но будут потеряны? Это неотъемлемая часть, в которой «родительский» вход использует аутентификацию SQL Server, которую я ищу ...
добавлено автор Steve Chambers, источник
Спасибо @Bridge - я думаю, что я в порядке с разницей между входами и пользователями. Чтобы быть понятным, это пользователи типа «пользователь SQL с логином», где логин имеет тип «аутентификация SQL Server», о котором я говорю.
добавлено автор Steve Chambers, источник
Чтобы объяснить это, я буду выполнять миграцию баз данных, отделив и скопировав файлы или выполнив резервное копирование и восстановление. В любом случае, мое понимание - это тот же набор пользователей, которые все еще будут существовать после миграции - они просто остались бы сиротами, если логинов не существует.
добавлено автор Steve Chambers, источник
Спасибо @Bridge. Выглядит хорошо, хотя sp_change_users_login устарел. Если вы можете изменить свой ответ, чтобы использовать ALTER USER, я с радостью соглашусь. Синтаксис выглядит как нечто: имя пользователя ALTER USER WITH login loginname
добавлено автор Steve Chambers, источник
Большое спасибо за вашу помощь.
добавлено автор Steve Chambers, источник
@SteveChambers Обратите внимание, что связанная статья и сценарий предназначены только для копирования логинов (доступ на уровне сервера), а не для копирования пользователей (доступ на уровне базы данных). Так что с ними ничего не случится, они не будут существовать на целевом сервере! Сценарий также не «перемещает» логины - просто создайте скрипт для копирования оригинала (все они все еще существуют на исходном сервере).
добавлено автор Bridge, источник
@SteveChambers См. этот вопрос SO для краткое объяснение разницы, если вы не уверены в различиях :-)
добавлено автор Bridge, источник
После запуска этого процесса логины теперь будут существовать на целевом сервере исходного сервера и (разные SID), пользователи будут существовать только в исходной базе данных, соответствующей исходному исходному серверу. Пользователям нужно будет воссоздать на целевом сервере, сопоставляя их с логином, скопированным из сценария в любом случае.
добавлено автор Bridge, источник
@SteveChambers Я тебя сейчас! Вам нужно посмотреть this статья MSDN, которая дает скрипту «повторно связать» осиротевших пользователей с логинами с тем же именем на новом сервере!
добавлено автор Bridge, источник
@SteveChambers Я отредактировал свой ответ, чтобы включить части этой статьи, которую вы искали.
добавлено автор Bridge, источник
@SteveChambers Итак, это - я не должен удивляться MSDN, их документация повсюду. Я редактировал, чтобы включить это. Я могу отправить эту проблему при подключении, если я получу время позже.
добавлено автор Bridge, источник
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

dbGeeks
dbGeeks
545 участник(ов)

Чат про базы данных, их устройство и приемы работы с ними. Разрешаются любые адеватные дискуссии в рамках тематики чата.

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Разработка СУБД
Разработка СУБД
143 участник(ов)