- Betrifft: Active Directory Federation Service 4.0 (und womöglich älter)
- System: Microsoft Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022
- Problem: Der SQL Server wird ersetzt und die SQL Datenbank soll vom alten SQL Server zum neuen übernommen werden.
Hintergrund
Der ADFS nutzt demnach nicht die integrierte Datenbank, sondern bereits als Backend-Server einen anderes System mit SQL Server. Die Angelegenheit für die Migration kann immer wieder aus unterschiedlichen Gründen vorkommen. Im meinem Fall ist dies meistens, wenn der Backend-Server – also der dort genutzte Microsoft SQL Server oder Microsoft Windows Server – langsam außerhalb des Supports gelangt und durch einen neuen ersetzt werden soll.
Daneben gibt es ebenso Möglichkeiten bei Wiederherstellungsszenarien. Theoretisch wäre damit auch eine Migration von der internen Windows Datenbank zu Microsoft SQL Server denkbar. Wird aber für gewöhnlich (durch Microsoft) abgeraten und über die Backup und Restore Funktion eines zusätzlichen Produktes (von Microsoft) empfohlen.
Behebung
Nachfolgend die dazu notwendigen Schritte zur Durchführung:
- Aktuelle Sicherung (der Server)
- Auslesen der aktuellen Konfiguration
- Beenden des ADFS-Dienstes (aller Server)
- Umzug der SQL Datenbanken
- Konfiguration aller ADFS auf neuen SQL Server
- Umzug des ADFSArtifactStore
- Finaler Test
Aktuelle Sicherung (der Server)
Sofern virtuelle Maschinen, einfach einen Snapshot anlegen und fertig. Möglichkeiten gibt es hierbei viele und besser haben und nicht brauchen, als nicht haben, aber dann brauchen 😉 .
Auslesen der aktuellen Konfiguration
Es gibt zwei wichtige Befehle zur Anzeige der aktuellen Konfiguration:
Get-WmiObject -namespace root/ADFS -class SecurityTokenService

Get-AdfsProperties | fl artifactdbconnection
Beenden des ADFS-Dienstes (aller Server)
Sofern eine ADFS-Farm in Verwendung ist, so sollten nun bei allen Servern der ADFS-Dienst beendet werden.
Stop-Service -Name adfssrv
Umzug der SQL-Datenbanken
Der ADFS nutzt zwei Datenbanken: AdfsConfigurationV3 und AdfsArtifactStore. Diese sollten über das SQL Server Management Studio getrennt werden. Dabei darf keine Fehlermeldung kommen – wenn doch, dann wurde vermutlich die ADFS-Rolle nicht auf allen Servern beendet 🙄 . Am neuen Server muss nicht nur die SQL-Datenbanken (vier Dateien) übertragen werden, sondern unter Anmeldung sollte ebenso der genutzte Benutzer für den ADFS-Dienst angelegt werden.
Konfiguration aller ADFS auf neuen SQL Server
Auf jeden Server muss der neue Pfad zur Konfigurationsdatenbank geändert werden.
$adfs = Get-WmiObject -namespace root/ADFS -class SecurityTokenService
$adfs.ConfigurationDatabaseConnectionString="Data Source=*neuer SQL-Server\Instanz*;Initial Catalog=AdfsConfigurat
ionV3;Integrated Security=True"
$adfs.put()
Umzug des ADFSArtifactStore
Der folgende Schritt wird nur einmalig pro ADFS Farm benötigt. Zudem muss der ADFS-Dienst auf diesen Server gestartet sein.
Start-Service -Name adfssrv
Set-AdfsProperties -ArtifactDbConnection "Data Source=*neuer SQL-Server\Instanz*;Initial Catalog=AdfsArtifactStore;Integrated Security=True"
Auf diesem Server kann direkt der Neustart des ADFS-Dienstes veranlasst werden.
Restart-Service -Name adfssrv
Finaler Test
Der Umzug bzw. Migration ist abgeschlossen. Ab nun können alle ADFS-Dienste gestartet werden – sofern eine ADFS-Farm zum Einsatz kommt. In meinem Beispiel aus dem Screenshot war es nur ein Server. Varianten habe ich schon unterschiedliche gehabt. Verlief eigentlich immer recht harmlos und zügig. Ein kurzer Test ein paar externer Webdienste (mit Authentifizierung, sonst wird der ADFS nicht genutzt 😉 ) würde ich trotzdem vorschlagen. Allein schon beim Start des ADFS-Dienstes sollte im SQL Server Management Studio der Zugriff auf die Datenbank am neuen Server sichtbar sein.