Как переместить базу данных ADFS SQL с одного сервера на другой

adfs logo

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В пошлый раз мы с вами разбирали, что такое снапшоты на виртуальных машинах, их применение и проблемы. Сегодня мы разберем интересную задачу, как переместить базу данных ADFS SQL с одного сервера на другой. Данная необходимость у вас может появиться, когда вам нужно выполнить локационную миграцию базы данных ADFS с одной площадки на другую. В любом случае очень полезно уметь производить данную манипуляцию.

Описание задачи

В моей Active Directory есть ADFS  сервис в режиме высокой доступности, предназначенный для сквозной аутентификации пользователей на различные сервисы в компании и партнеров, например для Azure Office 365. Мне потребовалось перенести базу данных ADFS на новый SQL кластер, у которого уже более свежая редакция. В результате я создал тестовый стенд из 5 виртуальных машин:

  • ✅Контроллер домена
  • ✅Два сервера ADFS
  • ✅SQL сервер с текущей БД ADFS
  • ✅Новый SQL сервер куда будет перенесена БД
  • Так же в DNS будет создана дополнительная внешняя зона, в которой будет две записи ссылающиеся на серверы ADFS по внутренним IP-адресам, это нужно, чтобы проверить внешнее имя подключения, где будет отдаваться XML.

Настройки ADFS

Убедитесь, что на новом сервере SQL у вас в "Security - Logins" добавлена учетная запись ADFS, от которой работает служба.

SQL logins

Так же проверьте используете ли вы SQL Server Browser, в моей конфигурации я его включаю, так как он работает изначально на новом кластере Always On.

SQL Server Browser

Перенастрастройка БД ADFS на другой SQL сервер

у ADFS две базы данных:

  • AdfsArtifactStore - Имеет для учетной записи службы ADFS от которой работает ферма, вот такие права (db_genevaservice и db_owner)

AdfsArtifactStore права на БД

В Owned Schemas ничего.

AdfsArtifactStore права на БД-2

  • AdfsConfigurationV3 - Имеет для учетной записи службы ADFS от которой работает ферма, вот такие права (db_genevaservice и db_owner) и так же identityServerPolicy

Права на БД AdfsConfigurationV3

Для начала я посмотрю текущие настройки ADFS, сделать это можно командой в PowerShell в режиме администратора.

Get-WmiObject -namespace root/ADFS -class SecurityTokenService

Тут первое на, что мы обратим внимание, это строка ConfigurationDatabaseConnectionString. Там будет прописано Data source=SQL.

Вывод настройки ConfigurationDatabaseConnectionString

И так же посмотрим настройки ADFS ArtifactDbConnection:

Get-AdfsProperties | fl ArtifactDbConnection

Вывод настроек ArtifactDbConnection

Теперь вам нужно остановить на обоих серверах службу ADFS, для этого поочереди на каждой ноде фермы выполните:

Get-Service adfs* | Stop-Service

Остановка службы ADFS

Далее я вам советую еще раз уточнить название SQL сервера и инстанса, для этого выполните на нем:

Select @@SERVERNAME

Как узнать имя SQL сервера

Ниже будут представлены три команды, их нужно выполнить на каждой из нод ADFS фермы

$temp= Get-WmiObject -namespace root/ADFS -class SecurityTokenService

$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"

$temp.put()

Перенастройка серверов ADFS

После того как вы выполнили данные команды на обоих серверах ADFS, вам необходимо так же на обоих серверах включить службу ADFS.

Get-service adfs* | Start-service


Запуск службы ADFS

Теперь когда службы работают на обоих серверах, выполните на первом из них:

Set-AdfsProperties –artifactdbconnection "Data Source=Имя сервера\имя инстанса если есть;Initial Catalog=AdfsArtifactStore;Integrated Security=True;Min Pool Size=20"

мой пример

Set-AdfsProperties –artifactdbconnection "Data Source=ADFSSQL01;Initial Catalog=AdfsArtifactStore;Integrated Security=True;Min Pool Size=20"

В результате у вас появится уведомление:

WARNING: PS0038: This action requires a restart of the AD FS Windows Service. If you have deployed a federation server farm, restart the service on every server in the farm

WARNING: PS0038: This action requires a restart of the AD FS Windows Service. If you have deployed a federation server farm, restart the service on every server in the farm

По сути перенастройка базы данных ADFS успешно выполнена, вам еще нужно проверить три вещи:

  • ✅Зайдите на сервер MS SQL и введите там запросе "sp_who2"

Поиск коннектов к базе данных MS SQL

  • ✅Далее вы должны проверить журнал событий и посмотреть, что там есть событие ID 100. The Federation Service sarted successfully. The following service hosts have been added. Кликните по ссылке https://adfs.pyatilistnik.org/adfs/fs/federationserverservice.asmx

Событие ID 100 ADFS

  • ✅У вас должна открыться XML-ка, которую я выделил стрелкой

ADFS XML

Так же можете выполнить верхние команды, и проверить, что настройки так же прописались новые. Еще вы можете встретить ошибки ID 356, как их поправить я писал ранее. Если у вас настроены различные SSO, например в Яндекс, то так же проверьте их в режиме инкогнито. На этом у меня все, с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Автор - Сёмин Иван

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *