Управление учетными данными безопасности SharePoint - Устранение неполадок учетных данных фермы

ОГЛАВЛЕНИЕ

Устранение неполадок учетных данных фермы

Присмотримся к команде updatefarmcredentials. У нее есть опасный параметр, который может принести много неприятностей, в особенности, если его использовать так, как описано в статье «Error Message When You Try to Use the SharePoint Products and Technologies Wizard: 'Exception: System.ArgumentException: Error during Encryption or Decryption» (Сообщение об ошибке при попытке использовать мастера настройки продуктов и технологий SharePoint: 'Исключение: System.ArgumentException: ошибка при шифровании или дешифровке). Я имею в виду параметр с именем -local. Разработчики SharePoint ввели этот параметр для выполнения локальных обновлений учетных данных фермы вручную. Идея состоит в том, что задание таймера можно удалить из очереди в центре администрирования (_admin/ServiceJobDefinitions.aspx), если задание повреждено или по какой-то причине не обрабатывается, а затем выполнить необходимый этап обновления напрямую с помощью команды.

stsadm -o updatefarmcredentials -userlogin <DOMAIN\USER> 
-password <PASSWORD> -local

Параметр -local сообщает команде updatefarmcredentials о том, что изменения пароля следует применить только на локальном компьютере. Важно осознавать, однако, что такое обновление оказывает влияние на ключ учетных данных и службу времени SharePoint, но не на пулы приложений, службу поиска, провайдеров SSP и т.д. Предполагается, что вы уже выполнили команду updatefarmcredentials без параметра -local на другом сервере фермы и таким образом перешифровали все пароли в базе данных конфигурации. Нет необходимости вновь выполнять этот этап перешифрования. А что будет, если вы использовали параметр -local, не выполнив эти действия?

Использование параметра -local без предварительного выполнения команды updatefarmcredentials без этого параметра приводит к осложнениям, поскольку параметр -local изменяет ключ учетных данных. В базе данных конфигурации пароли пула приложений зашифрованы с использованием старого ключа, но теперь этот ключ заменен.

Взгляните на рис. 5. Команду updatefarmcredentials больше невозможно запустить без параметра -local, поскольку для этого требуется повторное шифрование паролей, которые больше невозможно расшифровать. После аварийного завершения команды в журнале событий Application появляются записи следующего содержания: «Error re-encrypting credential Id 022e607e-b49e-40e4-bd3f-f56a3c69f94d with owner Id 431b6897-16eb-4b9a-be65-60f1f603008d during deploying of administration application pool credentials, please recreate credential manually. Operation is not valid due to the current state of the object.» (Ошибка при повторном шифровании идентификатора учетных данных 022e607e-b49e-40e4-bd3f-f56a3c69f94d с идентификатором владельца 431b6897-16eb-4b9a-be65-60f1f603008d во время развертывания учетных данных пула приложений администрирования. Повторно создайте учетные данные вручную.)

Рис. 5 Невозможно повторно зашифровать пароли пула приложений в связи с тем, что пароли больше невозможно расшифровать

Если вы только что изменили учетную запись фермы в односерверном развертывании с учетной записи Network Service на учетную запись домена, у вас серьезные неприятности, поскольку в этом случае вы больше не сможете вернуться к старому ключу учетных данных. Network Service не использует пароля, и, следовательно, ключ учетных данных является случайным.

В поисках справочной информации вы можете натолкнуться на статью «Error Message When You Try to Use the SharePoint Products and Technologies Wizard: 'Exception: System.ArgumentException: Error during Encryption or Decryption» (Сообщение об ошибке при попытке использовать мастера настройки продуктов и технологий SharePoint: 'Исключение: System.ArgumentException: ошибка при шифровании или дешифровке), уже упоминавшуюся мной ранее, и, в отсутствие дополнительных познаний, ваши неприятности возрастут, поскольку теперь вы узнаете, что необходимо создать новую базу данных конфигурации, чтобы избавиться от тех паролей, которые невозможно больше расшифровать. Это невообразимое стечение несчастливых обстоятельств. Во-первых, вы должны быть лишены возможности запускать команду updatefarmcredentials с параметром -local, либо команда должна создавать резервную копию старого ключа учетных данных, чтобы вы могли впоследствии перешифровать пароли. Либо она должна попросту обнаруживать то, что пароли еще не перешифрованы и в этот момент выполнять их повторное шифрование.

Вместо этого параметр -local идет дальше и благополучно разрушает вашу базу данных конфигурации SharePoint без каких бы то ни было предупржедений, как показано на рис. 5. Очень полезным было бы средство поддержки от корпорации Майкрософт, позволяющее сбросить пароли, которые больше невозможно расшифровать. И, конечно, была бы очень ценной надлежащая документация по программному продукту, предупреждающая об опасных свойствах некоторых операций командной строки и дающая рекомендации по выходу из этой неприятной ситуации.

Приятная новость заключается в том, что команда updateaccountpassword позволяет шифровать новые пароли учетных записей пула приложений без необходимости расшифровывать старые пароли. Поэтому данную команду следует использовать для обновления всех пулов приложений, которые использую учетные записи домена. При этом должно быть обработано большинство, если не все, нарушенные пароли. К сожалению, эту команду невозможно использовать для обновления пулов приложений, использующих учетную запись Network Service. Для данной учетной записи пароля не требуется, поэтому команда updateaccountpassword не применима.

Интересно, что учетная запись Network Service могла бы быть связана с данными пароля в базе данных конфигурации. Новые пулы приложений, использующие Network Service, не имеют паролей, но если вы все-таки измените пул приложений так, чтобы использовать учетную запись домена, и затем вернетесь к исходной ситуации, Network Service унаследует ссылку на пароль учетной записи. SharePoint не предусматривает установку пароля со значением null (порочная практика написания кода), и в результате «мусорные» данные приводят к осложнениям.

Складывается нелепая ситуация, потому что предполагается, что пользователи должны отказаться от своих баз данных конфигурации, потому что больше невозможно расшифровать «мусорные» и абсолютно бесполезные данные! Если вам повезет, вы можете изменить конфигурацию пула приложений в центре администрирования (_admin/FarmCredentialManagement.aspx) и указать учетчную запись домена. Если вам не повезет, вы столкнетесь с ошибкой шифрования/дешифровки, отображенной на рис. 6. Вы не сможете изменить учетную запись в центре администрирования, вы не сможете воспользоваться командой updateaccountpassword, вы не сможете запустить мастера настройки продуктов и технологий SharePoint и вы не сможете обновить учетные данные фермы с помощью команды updatefarmcredentials. Что же вы теперь будете делать?

Рис. 6 Осложнения, вызываемые остатками пароля Network Service, присутствующими в базе данных конфигурации

Для разрешения этой проблемы необходим инструмент, работающий непосредственно в базе данных конфигурации и удаляющий эти остатки, например средство сброса пароля AppPool, показанное на рис. 7 и включенное вместе с исходным кодом в сопровождающий материал. Этот инструмент крайне прост. Оно извлекает данные пулов приложений, использующих учетные записи с соответствующими зашифрованными паролями, непосредственно из базы данных конфигурации, а затем использует объектную модель SharePoint для выяснения возможности расшифровки пароля пула приложения.

Рис. 7 Установка значения null для поврежденных паролей

Если получение доступа к паролю посредством объектной модели завершается аварийно с исключением аргумента, значит пароль поврежден. В этой ситуации данный инструмент дает возможность заменить массив зашифрованных значений байтов пароля пустой ссылкой и сохраняет изменения обратно в базе данных конфигурации. Пустые строки не требуется расшифровывать и, следовательно, они не приведут к исключению аргумента. Проблема решена.

Для завершения процесса восстановления рекомендую с помощью Stsadm.exe и центра администрирования обновить учетные данные фермы и впоследствии все учетные записи пула приложений. Ферма возвращена в согласованное состояние, и вам не пришлось отказываться от вашей базы данных конфигурации.