Сценарий:
Пытаюсь восстановить из бакпака, взятого из SQL Azure.
Либо в новый экземпляр базы данных SQL Azure, либо на локальный сервер. Для более ранних версий с порталом управления или клиентской стороны DAC Framework. Инструменты.
Кажется, он работает нормально, и, естественно, пользователи SQL не сопоставляются с логинами SQL после восстановления.
Что я пробовал:
Когда я пытаюсь отобразить его с помощью: alter user MyUser with login = MyLogin
, он терпит неудачу с:
Сообщение 33016, уровень 16, состояние 1, строка 6 Невозможно переназначить пользователя на имя входа. Переназначение может быть выполнено только для пользователей, которые были сопоставлены с логинами Windows или SQL.
Выполнение select * from sys.database_principals
действительно перечисляет пользователей, но с гораздо более длинным SID, чем пользователь с проверкой подлинности SQL, которого я создал для сравнения.
В локальной среде, если я запускаю sp_change_users_login 'Report'
, пользователи не отображаются в списке, поэтому они не определяются как осиротевшие.
В локальной среде, если я попытаюсь использовать sp_change_users_login, произойдет сбой:
Сообщение 15291, уровень 16, состояние 1, процедура sp_change_users_login, строка 114 Завершение этой процедуры. Имя пользователя «MyUser» отсутствует или недействительно.
В помещении, если я попробую это через раздел «Сопоставление пользователей» пользовательского интерфейса «Свойства входа», я получаю:
Не удалось создать для пользователя «Мой пользователь». ... Пользователь, группа или роль MyUser уже существует в текущей базе данных.
Я попытался сделать это снова, на случай, если что-то было повреждено при восстановлении по какой-либо причине, такие же результаты.
Вопрос:
Как я могу переназначить этих пользователей SQL?
Я хотел бы избежать повторного создания их с нуля и любого отношения, которое они имеют к объектам схемы в базе данных?
Дополнительная информация:
Один тип пользователей SQL, который очень похож на то, что я вижу для пользователей SQL Azure, создан с помощью
create user AnotherUser without login
Они терпят неудачу точно так же во всех трех подходах к отображению, которые я использовал выше. Это не относится ни к одному из подходов для обычных пользователей SQL. Кроме того, sid также длинный и начинается с того же «0x010500000000000903000000».