В экземпляре SQL 2008 у меня есть логин с ролями dbcreator и public. Когда я восстанавливаю базу данных на этом сервере, я не могу использовать эту базу данных, потому что все сопоставления пользователь -> логин в ней нарушены (идентификаторы на разных серверах разные).
Существует хранимая процедура sp_change_users_login 'Auto_Fix', userName, но я не могу ее использовать, потому что вообще не могу получить доступ к базе данных. Наконец, поскольку у меня нет роли securityAdmin, я не могу сопоставить логины с пользователями базы данных.
Есть ли способ предоставить мне разрешение на доступ к базе данных в процессе восстановления?
Нет извините.
"securityAdmin" находится на уровне сервера и не имеет отношения к каким-либо правам базы данных.
Обратите внимание (к вашему сведению, пока мало!) Это исправлено для SQL Server 2011 (также известного как Denali) с «автономными базами данных».
Авторизованный администратор может написать вспомогательную процедуру, которая исправляет сопоставление. Затем он может подписать процедуру и дать ей необходимое разрешение посредством подписи кода (см. Подписание хранимой процедуры). Затем он может предоставить вам разрешение на выполнение этой вспомогательной процедуры, и вы сможете выполнить операцию (исправить сломанные входы в систему) без привилегии securityAdmin.
В конечном итоге я решил использовать массовый импорт каждой таблицы в базе данных вместо восстановления.
Насколько я знаю, вам нужен кто-то с dbo, чтобы исправить это за вас. Я могу ошибаться в этом, может быть, есть бэкдор, но он почти такой, как задумано. У вас есть только dbcreator, поэтому вы не можете копаться в БД после ее создания.