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

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

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

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

  • «Ошибка: 18456, уровень серьезности: 14, состояние: 5.»
  • Ошибка входа для пользователя «DomainX \ UserX». Причина: не удалось найти логин, соответствующий указанному имени.

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

Есть две вещи, которые «трогают меня»:

  1. как SID для других пользователей совпадают и не совпадают только для одного?
  2. если другие пользователи в порядке (у них старые идентификаторы безопасности), тогда я могу предположить, что в контроллере домена нет проблем?

Я много обнаружил о различных манипуляциях с двумя существующими (или осиротевшими?) учетными записями пользователей, но не смог найти только об изменении 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 и может обращаться к базе данных. Теперь все работает как надо! :)

3
задан 31 March 2016 в 18:12
2 ответа

У меня была аналогичная ситуация с удаленным пользователем AD и несоответствием SID. Для меня проблема заключалась в локальном кэшировании SID, и решением было следовать обходному пути, указанному ниже по ссылке на сервере SQL и клиентском компьютере.

https://support.microsoft.com/en-us/help/946358/ the-lsalookupsids-function-may-return-the-old-user-name-вместо-

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

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

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

  3. Укажите на «Создать» и затем щелкните «Значение DWORD».

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

  5. Щелкните правой кнопкой мыши LsaLookupCacheMaxSize, а затем нажмите «Изменить».

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

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

При желании после этого щелкните правой кнопкой мыши созданный вами DWORD LsaLookupCacheMaxSize и удалите его.

2
ответ дан 3 December 2019 в 06:29

Вы пытались проверить наличие потерянных пользователей, введя следующую команду:

sp_changes_users_login 'Report' 

(для базы данных master уязвимого сервера SQL и для 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.

1
ответ дан 3 December 2019 в 06:29

Теги

Похожие вопросы