Сценарий:
Попытка восстановления из bacpac, взятого из 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
Они терпят неудачу точно таким же образом во всех 3 подходах картирования, которые я использовал выше. Это не относится ни к одному из подходов для обычных пользователей SQL. Кроме того, sid также длинный и начинается с того же "0x010500000000000903000000"