В принципе, все несложно.
Особенности:
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 - там все просто.
И еще вопрос можно? А ЗАЧЕМ так делать? Экспортом - импортом не проще?
|