Sql Server Восстановление базы данных
Я работаю в Sql Server 2008. Проблема в том, что когда я восстанавливаю базу данных, пользователи базы данных отключаются, я могу сопоставить этого конкретного пользователя с пользователем входа в систему. Для сопоставления я должен удалить пользователя из базы данных, а затем сопоставить пользователя.
Например:- Имя базы данных:- Пользователь базы данных Clv:- Вход в систему сервера Clv:- Clv этот пользователь сопоставлен с пользователем Clv Database Clv
Then i took full backup of the Clv database. Now i want to change the server of the database so i restore the backup in new server.
In new server i Create Clv login and trying to map it with the Clv database's Clv user but the error is there is already a Clv User so i delete the user of the database and then i map user again so its done on that way but i want to know that is there any other way out for this situation or there is only this wayout.
Now when i restore the database the The Clv database User no longer mapped with the Clv Login. For to doing That i have to remove Clv database user first and the Map with Clv Login.
Есть ли какое-то другое решение??
3 ответа
Да, сначала проверьте потерянных пользователей в восстановленной базе данных с помощью этого оператора:
sp_change_users_login @ Action = 'Отчет'
Затем переназначить осиротевших пользователей с этим. Вы должны заменить осиротевшим пользователем и фактическим логином базы данных.
sp_change_users_login @Action='update_one', @UserNamePattern='', @LoginName=''
Пользователи сопоставляются с именами входа не по имени, а по идентификатору, называемому sid (идентификатор безопасности). К счастью, у вас есть представление о них, и вы можете найти те, которые не соответствуют. Представление sys.database_principals имеет столбец с именем sid, который отображается на столбец в sys.server_principals с именем sid. Сделайте левое соединение между ними, чтобы найти пользователей в вашей базе данных, которые не сопоставляются с логином. Поскольку вы работаете над SQL 2008, предпочтительным методом изменения имени входа, с которым связан пользователь, является "alter user [foo] with login = [bar]"
Альтернативой является создание имен входа с правильным sid на целевом сервере, чтобы при восстановлении базы данных sid совпадал. Синтаксис для этого "создать логин [bar] с sid = 0xyour_sid_here...". Надеюсь это поможет.
Есть связанный вопрос по переполнению стека. Ответ abalogh указывает на очень полезную ссылку поддержки Microsoft, которая дает информацию об этой проблеме и предлагает несколько решений.