| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Перенос БД на другой MS SQL (ошибка «This user already exists» ) |
| Автор: Vit 5.1.2005, 17:03 | ||
Недавно столкнулсь с проблемоей переноса БД на другой сервер MS SQL. Довольно долго пришлось искать решение проблемы. Думаю информация может оказаться полезной.![]() Ситуация –> в БД есть пользователь, не 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 конектимся к восстановленной БД и применяем следующую хранимую процедуру для каждого пользователя БД:
UserName – учетная запись сервера UserName1 – имя пользователя БД |