Назад | Перейти на главную страницу

Перенос базы данных на новый сервер

я восстановление резервной копии производственной базы данных в новый сервер. На новом сервере также размещается приложение, использующее базу данных. Поэтому я бы хотел использовать ту же комбинацию пользователь / пароль для подключения к базе данных. Пользователь также включен в резервную копию базы данных, поэтому я подумал, что это должно сработать. Однако пользователь не существует как пользователь (базы данных) на новом сервере. Так что я создал нового пользователя сервера и попытался сопоставить эти учетные данные с только что восстановленной базой данных. Однако это не удается, потому что user already exists в базе данных.

Возможно ли (и если да, скажите, как) переместить / скопировать пользователя из базы данных (независимо от сервера) в список логинов (базы данных) сервера?

В SQL-Server 2008 пользователи базы данных для восстановленной базы данных и учетные записи сервера могут быть не синхронизированы, поскольку внутренние идентификаторы не совпадают. Чтобы исправить этот запуск:

EXEC sp_change_users_login @Action = '' Update_One '', @ UserNamePattern = 'databaseusername', @LoginName = 'logonname';

против вашей восстановленной базы данных и для каждого пользователя / логина.

В SQL-Server 2012 появилась новая возможность использовать пользователей базы данных независимо от логинов сервера.

Я знаю, что опаздываю, но это может помочь кому-то другому.

Логины находятся на уровне сервера. Пользователи находятся на уровне базы данных. Существует значение идентификатора (называемое SID), которое объединяет их вместе. Когда вы создаете учетную запись SQL на новом сервере, SQL выбирает новое значение SID. Природа алгоритма выбора SID заключается в том, что вы не получите одинаковое значение на двух разных серверах. Когда вы восстанавливаете базу данных со старого сервера, значение SID из базы данных не соответствует значению SID на сервере.

На этом этапе вы хотите использовать процедуру sp_change_users_login.

Но ДО того, как вы дойдете до этой точки, вы можете избавить себя от множества неприятностей, особенно если у вас есть журнал учетных записей для миграции со старого сервера на новый. Посмотрите на sp_help_revlogin. Это процедура, поддерживаемая Microsoft. Процедура и документация находятся Вот и Вот. (Существуют разные версии процедуры для разных версий SQL Server. Существует также вспомогательная функция, называемая sp_hexadecimal.) По сути, вам необходимо создать эти процедуры на своем старом сервере, а затем запустить их. В статьях KB есть подробности.

Большим преимуществом процедуры sp_help_revlogin является то, что она создает DDL для создания пользователей, который сохраняет значение идентификатора и пароль для входа в систему SQL. Таким образом, вы можете просто запустить sp_help_revlogin, просмотреть сгенерированный DDL, чтобы найти нужных пользователей, запустить этот код на новом сервере, а затем просто восстановить базу данных. На этом этапе значения SID должны совпадать, и процедура sp_change_users_login вам не понадобится.

Другой способ обойти это - использовать интегрированную безопасность (также известную как «домен» или «окна»). При использовании учетных записей AD значение SID извлекается из домена при создании входа. Это значение SID затем помещается в базу данных при создании пользователя базы данных для этого входа в систему. Поскольку существует только один источник значений SID, несоответствия возникнуть не может. Конечно, использование встроенной безопасности не всегда возможно.