Как переместить базу данных ADFS SQL с одного сервера на другой
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В пошлый раз мы с вами разбирали, что такое снапшоты на виртуальных машинах, их применение и проблемы. Сегодня мы разберем интересную задачу, как переместить базу данных ADFS SQL с одного сервера на другой. Данная необходимость у вас может появиться, когда вам нужно выполнить локационную миграцию базы данных ADFS с одной площадки на другую. В любом случае очень полезно уметь производить данную манипуляцию.
Описание задачи
В моей Active Directory есть ADFS сервис в режиме высокой доступности, предназначенный для сквозной аутентификации пользователей на различные сервисы в компании и партнеров, например для Azure Office 365. Мне потребовалось перенести базу данных ADFS на новый SQL кластер, у которого уже более свежая редакция. В результате я создал тестовый стенд из 5 виртуальных машин:
- ✅Контроллер домена
- ✅Два сервера ADFS
- ✅SQL сервер с текущей БД ADFS
- ✅Новый SQL сервер куда будет перенесена БД
- Так же в DNS будет создана дополнительная внешняя зона, в которой будет две записи ссылающиеся на серверы ADFS по внутренним IP-адресам, это нужно, чтобы проверить внешнее имя подключения, где будет отдаваться XML.
Убедитесь, что на новом сервере SQL у вас в "Security - Logins" добавлена учетная запись ADFS, от которой работает служба.
Так же проверьте используете ли вы SQL Server Browser, в моей конфигурации я его включаю, так как он работает изначально на новом кластере Always On.
Перенастрастройка БД ADFS на другой SQL сервер
у ADFS две базы данных:
- AdfsArtifactStore - Имеет для учетной записи службы ADFS от которой работает ферма, вот такие права (db_genevaservice и db_owner)
В Owned Schemas ничего.
- AdfsConfigurationV3 - Имеет для учетной записи службы ADFS от которой работает ферма, вот такие права (db_genevaservice и db_owner) и так же identityServerPolicy
Для начала я посмотрю текущие настройки ADFS, сделать это можно командой в PowerShell в режиме администратора.
Тут первое на, что мы обратим внимание, это строка ConfigurationDatabaseConnectionString. Там будет прописано Data source=SQL.
И так же посмотрим настройки ADFS ArtifactDbConnection:
Теперь вам нужно остановить на обоих серверах службу ADFS, для этого поочереди на каждой ноде фермы выполните:
Далее я вам советую еще раз уточнить название SQL сервера и инстанса, для этого выполните на нем:
$temp.ConfigurationdatabaseConnectionstring="data source=Имя сервера\имя инстанса если есть;initial catalog=AdfsConfigurationV3;Integrated Security=True;Min Pool Size=20"
мой пример $temp.ConfigurationdatabaseConnectionstring="data source=ADFSSQL01;initial catalog=AdfsConfigurationV3;Integrated Security=True;Min Pool Size=20"
После того как вы выполнили данные команды на обоих серверах ADFS, вам необходимо так же на обоих серверах включить службу ADFS.
Теперь когда службы работают на обоих серверах, выполните на первом из них:
мой пример
Set-AdfsProperties –artifactdbconnection "Data Source=ADFSSQL01;Initial Catalog=AdfsArtifactStore;Integrated Security=True;Min Pool Size=20"
В результате у вас появится уведомление:
По сути перенастройка базы данных ADFS успешно выполнена, вам еще нужно проверить три вещи:
- ✅Зайдите на сервер MS SQL и введите там запросе "sp_who2"
- ✅Далее вы должны проверить журнал событий и посмотреть, что там есть событие ID 100. The Federation Service sarted successfully. The following service hosts have been added. Кликните по ссылке https://adfs.pyatilistnik.org/adfs/fs/federationserverservice.asmx
- ✅У вас должна открыться XML-ка, которую я выделил стрелкой
Так же можете выполнить верхние команды, и проверить, что настройки так же прописались новые. Еще вы можете встретить ошибки ID 356, как их поправить я писал ранее. Если у вас настроены различные SSO, например в Яндекс, то так же проверьте их в режиме инкогнито. На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.