По материалам статьи Neil Boyle на swynk.com "Fixing Broken Logins"
http://www.swynk.com/friends/boyle/default.asp
При переносе базы данных на новый сервер копированием-восстановлением
или при переприкреплении файла базы данных, связь между login и
пользователями базы данных разрывается. На новый сервер перемещается
только половина информации, определяющей доступ клиента сервера к
данным, которая содержится непосредственно в базе данных. Вторая
половина необходимой для доступа к информации остаe:тся в таблице
syslogins первоначального сервера и содержит информацию, относящуюся
к logins. Из предыдущих выпусков рассылки Вы помните, что login - это не
тот же самое, что пользователь базы данных.
При вводе новой учётной записи подключения к SQL серверу (login), она
автоматически становится пользователем одной или более баз данных. Для
иллюстрации связей, которые при этом создаются, можно выполнить
представленный низе запрос:
select master..syslogins.name as login_name, sysusers.name as user_name
from master..syslogins inner join sysusers
on master..syslogins.suid = sysusers.suid
(Поле "Suid" - идентификатор (ID) учётной записи подключения к серверу,
полученный из таблицы syslogins. Suid = 1 - администратор системы,
Suid = -1 - учетная запись гостя).
Результат, который Вы получите, может различаться у разных баз и
серверов, но связь logins и пользователей базы данных будет видна.
Обратите внимание, что имена пользователей и logins не обязательно
совпадают, а учётная запись sa всегда соответствует пользователю базы
dbo.
В рассматриваемом нами случае, пользователи перенесённой на другой
сервер базы данных потеряют связь с соответствующими им учётными
записями подключения. Попытка простого добавления на новом сервере
недостающих logins успеха не возымеет ввиду того, что поля Suid у logins
и пользователей БД всё же будут различны. Для правильного установления
связи между пользователем БД и login, воспользуйтесь хранимой процедурой
sp_change_users_login. Если клиент сервера баз данных не желает разглашать
свой пароль доступа, Вам поможет процедура sp_addlogin.
Перевод: Александр Гладченко 2001г.
|