Назад | Перейти на главную страницу

Изменить SID пользователя SQL Server

У меня SQL Server 2012, и я использую пользователей домена (из Active Directory). По ошибке пользователи были удалены из AD, созданы новые с идентичными логинами и паролями (но с разными SID), удалены и восстановлены исходные - в конце концов старые пользователи со старыми SID были воссозданы.

Почти все снова вроде нормально, кроме одного пользователя. SQL Server каким-то образом застрял с неправильным SID для одного пользователя (все другие пользователи в порядке) и не получает правильный SID от AD. Я проверил SID в обоих местах - SID в AD не такие, как в SQL Server.

В результате этого «несоответствия SID» этот пользователь не может получить доступ к базе данных. Если он пытается, он терпит неудачу и получает:

Я удалил пользователя с сервера и все базы данных, которые он использовал, затем добавил - и снова получил неправильный SID! И этот «новый» пользователь все еще не может подключиться к базе данных.

Есть две вещи, которые "скручивают мои шестерни":

  1. как SID для других пользователей совпадают и не совпадают только для одного?
  2. если другие пользователи в порядке (у них старые 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 и на компьютере клиента.

https://support.microsoft.com/en-us/help/946358/the-lsalookupsids-function-may-return-the-old-user-name-instead-of-the

  1. Откройте редактор реестра. Для этого в Windows XP или Windows Server 2003 нажмите «Пуск», выберите «Выполнить»> введите regedit и нажмите «ОК».

    Для этого в Windows Vista и новее нажмите кнопку Пуск, введите regedit в поле> Начать поиск и нажмите клавишу ВВОД.

  2. Найдите и щелкните правой кнопкой мыши следующий подраздел реестра: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa>

  3. Наведите указатель мыши на «Создать», а затем - «Значение DWORD».

  4. Введите LsaLookupCacheMaxSize и нажмите клавишу ВВОД.

  5. Щелкните правой кнопкой мыши LsaLookupCacheMaxSize и выберите команду Изменить.

  6. В поле «Значение» введите 0 и нажмите кнопку «ОК».

  7. Закройте редактор реестра.

При желании после этого щелкните правой кнопкой мыши созданный 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.