У меня SQL Server 2012, и я использую пользователей домена (из Active Directory). По ошибке пользователи были удалены из AD, созданы новые с идентичными логинами и паролями (но с разными SID), удалены и восстановлены исходные - в конце концов старые пользователи со старыми SID были воссозданы.
Почти все снова вроде нормально, кроме одного пользователя. SQL Server каким-то образом застрял с неправильным SID для одного пользователя (все другие пользователи в порядке) и не получает правильный SID от AD. Я проверил SID в обоих местах - SID в AD не такие, как в SQL Server.
В результате этого «несоответствия SID» этот пользователь не может получить доступ к базе данных. Если он пытается, он терпит неудачу и получает:
Я удалил пользователя с сервера и все базы данных, которые он использовал, затем добавил - и снова получил неправильный SID! И этот «новый» пользователь все еще не может подключиться к базе данных.
Есть две вещи, которые "скручивают мои шестерни":
Я обнаружил много разных манипуляций с двумя существующими (или осиротевшими?) Логинами пользователей, но не смог найти просто об изменении SID.
Но главный вопрос - как изменить SID одного пользователя в MS SQL Server (версия 11.0.)? Это вообще возможно?
ОБНОВИТЬ
Продолжая думать об этом, я понял, что у меня неправильный вопрос. Поскольку этот UserX является пользователем домена, он не является локальным пользователем SQL Server - это означает, что я не могу изменить SID непосредственно в SQL Server.
У меня есть два идентичных сервера (ServerA и ServerB), которые используют одних и тех же пользователей из AD. В ServerB UserX имеет правильный SID и может нормально проходить аутентификацию в SQL Server (правильный SID означает то же, что и в AD). Чтобы было ясно - у UserX неправильный SID в ServerA.
Вопрос - если этот пользователь является пользователем домена из Active Directory, где и как изменить его SID? Если UserX может аутентифицироваться в ServerB, это означает, что SID необходимо изменить в ServerA в Windows Users?
Пожалуйста, поправьте меня, если какие-то мысли или идеи пошли не так.
ОБНОВЛЕНИЕ 2
Я нашел решение своей проблемы, хотя оно не дало ответа на вопрос. Для всех, кто интересуется - мои коллеги обнаружили в AD удаленного пользователя с неправильным SID. Этот пользователь был продлен, и теперь в AD активны оба пользователя - хорошо один и тот плохой один. SQL Server распознал пользователей, и проблема с логином пользователя и несоответствием SID каким-то образом разрешилась сама собой - UserX в ServerA теперь имеет право SID и может получить доступ к базе данных. Теперь все работает как надо! :)
У меня была аналогичная ситуация с удаленным пользователем AD и несоответствием SID. Для меня проблема заключалась в локальном кэшировании SID, и решение заключалось в том, чтобы следовать обходному пути по ссылке ниже на сервере SQL и на компьютере клиента.
Откройте редактор реестра. Для этого в Windows XP или Windows Server 2003 нажмите «Пуск», выберите «Выполнить»> введите regedit и нажмите «ОК».
Для этого в Windows Vista и новее нажмите кнопку Пуск, введите regedit в поле> Начать поиск и нажмите клавишу ВВОД.
Найдите и щелкните правой кнопкой мыши следующий подраздел реестра: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa>
Наведите указатель мыши на «Создать», а затем - «Значение DWORD».
Введите LsaLookupCacheMaxSize и нажмите клавишу ВВОД.
Щелкните правой кнопкой мыши LsaLookupCacheMaxSize и выберите команду Изменить.
В поле «Значение» введите 0 и нажмите кнопку «ОК».
Закройте редактор реестра.
При желании после этого щелкните правой кнопкой мыши созданный DWORD LsaLookupCacheMaxSize и удалите его.
Пробовали ли вы проверить пользователей-сирот, выполнив следующую команду:
sp_change_users_login 'Report'
(против мастер базы данных затронутого SQL Server и против database_in_question на пораженном сервере.)
Если у вас есть осиротевшие пользователи, вы можете выпустить:
sp_change_users_login 'Update_one', 'Domain\UserX', 'Domain\UserX'
... с затронутой базой данных или если логин SQL сопоставлен с пользователем базы данных, выдайте:
sp_change_users_login 'Update_one', 'UserX', 'Domain\UserX'
чтобы исправить несоответствие SID.
Синтаксис sp_change_users_login на сайте Microsoft.