Показать сообщение отдельно
Старый 18.05.2004, 18:49   #4  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,284 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
В принципе, все несложно.
Особенности:
1. При восстановлении лучше не делать пользователя bmssa владельцем базы.
2. После восстановления запустить от пользователя sa команду sp_change_users_login 'Auto_Fix', 'bmssa'.
После чего проверить, что user bmssa в новой базу данных соответствует login bmssa.
Если все слишком запущено и такой путь не проходит, нужно сделать переназначение всех объектов базы на другого владельца, а после удаление из БД пользователя bmssa создать его заново и переназначить владельцем объектов БД. Но это работает дольше. Где-то у Мазуркина и на этом сайте валяется алгоритм...

В Вашем случае попробуйте такой алгоритм:
1. Создать новую БД с владельцем sa (bmssa отдыхает).
2. Восстановить БД из архива. При этом в БД появится пользователь bmssa, не связанный ни с каким логином.
3. Запустить от пользователя sa команду sp_change_users_login 'Auto_Fix', 'bmssa' в новой БД. Внимательно прочитайте последнее предложение!
4. Проверить, что логин bmssa стал соответствовать пользователю bmssa в новой базе.

Теперь объяснение ПОЧЕМУ так происходит.
В SQL сервере в архиве сохраняется информация о всех пользователях: его ID в БД, его имя и соответствующий ему логин.
Но в разных серверах ID у логинов с одним именем могут и не совпасть (что логично).
Поэтому при восстановлении чужой БД сервер не может правильно связать пользователей БД с логинами сервера. Правильно он восстанавливает только объекты с владельцем dbo - там все просто.

И еще вопрос можно? А ЗАЧЕМ так делать? Экспортом - импортом не проще?
__________________
Михаил Андреев
https://www.amand.ru