Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Перенос БД на другой MS SQL (ошибка «This user already exists» )


Автор: Vit 5.1.2005, 17:03
Недавно столкнулсь с проблемоей переноса БД на другой сервер MS SQL. Довольно долго пришлось искать решение проблемы. Думаю информация может оказаться полезной.smile

Ситуация –> в БД есть пользователь, не sa, в моем случае sysdba, который является владельцем некоторых объектов в БД. На сервере есть логин sysdba. При переносе backup копии базы и ее восстановления на другом сервере после создания на нем логина sysdba подключение к восстановленной БД под sysdba оказывается невозможным, а попытка его добавления в БД вызывает ошибку «This user already exists.». 

Данная ситуация вызвана принципами безопасности SQL Server. На сервере имеются учетные записи сервера (Security\logins), информация о которых хранится в системной БД master, и пользователи БД (Database\users), информация о которых хранится в самой базе данных. Каждая учетная запись сервера имеет свой уникальный номер.  SQL Server помещает данный номер в БД master, вместе с информацией об учетной записи сервера (login) и в БД в которой данный login назначен для пользователя БД. Проблема возникает в момент проверки сервером соответствия данных logins и users БД за счет сравнения номеров в базе master и самой БД. В случае их не соответствия доступ к БД для пользователя запрещается.
Восстанавливается данное соответствие следующим образом:
1.    Создаем на сервере, на который перенесена БД, учетную запись сервера (security\logins), если нужная запись не создана.
2.    В Query Analyzer под sa конектимся к восстановленной БД и применяем следующую хранимую процедуру для каждого пользователя БД:

Код

Exec sp_change_users_login 'update_one', 'User_Name', 'UserName1'


UserName – учетная запись сервера
UserName1 – имя пользователя БД

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)