Я настраиваю задание SQL Server для резервного копирования и проверки всех моих БД
После этого в большинстве моих баз данных пользователя больше нет в списке. Пользователь присутствует, но не связан.
Что могло вызвать это?
Вы восстанавливаете базу данных на другом экземпляре сервера? Пользователи базы данных (перечисленные в разделе «Безопасность» на уровне базы данных) - это не то же самое, что и учетные записи экземпляра сервера (указанные в разделе «Безопасность на уровне сервера»). Если вы восстанавливаете базу данных в другом экземпляре, обычно пользователи базы данных будут разъединены, поскольку учетные записи экземпляра сервера не существуют на целевом экземпляре. Даже если вы создадите логин на целевом экземпляре с тем же именем, что и на оригинальном экземпляре, он не будет работать, потому что новый логин с другим идентификатором безопасности (SID).
Вы можете копировать логины между экземплярами сервера, используя sp_help_revlogin
хранимая процедура. Это сгенерирует сценарий, который создаст логин, используя тот же SID, пароль и все остальное. Запустите сценарий на целевом сервере, и пользователи базы данных снова будут связаны с логинами сервера.
Исходный код и дополнительная информация о том, как использовать sp_help_revlogin
можно найти на Вот.
Была ли восстановлена база данных на другом сервере? В этом случае идентификаторы безопасности для любых учетных записей SQL Server на этом сервере будут другими. Пользователи базы данных сопоставляются с именами входа на основе SID, поэтому пользователи в конечном итоге остаются сиротами.
Чтобы обновить пользователя в соответствии с существующим логином, используйте следующий запрос:
ALTER USER username WITH LOGIN = логин