ADFS WID TO SQL Migration

ADFS WID TO SQL Migration yazımızda ADFS sunucusunun database’ni SQL sunucusuna taşımayı göstereceğiz. Eğer kurulum sırasında SQL sunucusu yapılmadıysa Windows Internal Database olarak kurulan ADFS yapısında bizlere bazı zorluklar getirmektedir. WID ile bir tane primary sunucumuz olur ve console kullanımını bu sunucu üzerinden yapmaktayız. WID database diğer sunuculara replike olmaktadır. Fakat SQL kullanılması ile beraber her sunucu primary olmaktadır. Konsol kullanımı bütün sunuculara açık olarak gelmektedir.

İlk olarak ADFS Database konfigurasyonunu görmekteyiz.

$adfsdatabase=gwmi -Namespace root/ADFS -Class SecurityTokenService
$adfsdatabase.ConfigurationDatabaseConnectionString
ADFS WID TO SQL Migration Database

Sonra ADFS Servisini durduruyoruz.

Şimdi sıra geldi bu databaseleri detach etmek gerekmektedir. Powershell kullanarak detach ediyoruz.

$connection=New-object -TypeName System.Data.SqlClient.SqlConnection
$connection.ConnectionString="Server=np:\\.\pipe\microsoft##wid\tsql\\query;Database=master;Trusted_Connection=True;"

$connection.Open()
$command= $connection.CreateCommand()
$command.CommandText = "EXEC sp_detach_db @dbname= N'AdfsArtifactStore'"
$result= $command.ExecuteReader()
$connection.Close()

$connection.Open()
$command= $connection.CreateCommand()
$command.CommandText = "EXEC sp_detach_db @dbname= N'AdfsConfigurationV4'"
$result= $command.ExecuteReader()
$connection.Close()
ADFS WID TO SQL Migration Detach

Detach sonrası Default kurulumda WID database “C:\Windows\WID\Data” klasöründe bulunmaktadır. Servisi durduktan sonra ADFS ait mdf ve ldf dosyalarını SQL Sunucumuza kopyalıyoruz.

SQL tarafında ben standart DATA ların yanına kopyaladım sizler isterseniz başka lokasyonlara kopyalayabilirsiniz. Ona göre birazdan paylaşacağım query düzenlemeniz gerekmektedir.

SQL sunucumuzda aşağıdaki kodu kullanarak attach ediyoruz.

GO
CREATE DATABASE [AdfsConfigurationV4] ON
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\AdfsConfigurationV4.mdf' ),
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\AdfsConfigurationV4_log.ldf' )
  FOR ATTACH
GO
USE [master]
GO
CREATE DATABASE [AdfsArtifactStore] ON
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\AdfsArtifactStore.mdf' ),
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\AdfsArtifactStore_log.ldf' )
  FOR ATTACH
GO
ALTER DATABASE AdfsConfigurationV4 set enable_broker with rollback immediate
GO
ADFS WID TO SQL Migration Attach

Daha sonrası ADFS servisinin hangi kullanıcı hesabı ile çalıştırıldığını iki şekilde öğrenebilirsiniz. Hem Servislerden hem de powershell olarak görebilirsiniz.

ADFS WID TO SQL Migration ADFS service account

ADFS servis hesabını SQL tarafında oluşturuyoruz.

public ve db_genevaservice rolünün ADFS databaselerin de olmasına dikkat edin ve kontrol edin.

ADFS WID TO SQL Migration ADFS Servis hesabi yetkisi

Daha sonrası en son yapılması gereken ADFS sunucusunda database configuration düzenlemektedir. Artık SQL tarafını gösterebiliriz.

Koyu yazılan yerlere kendi CLUSTER veya instance name yazabilirsiniz.

$temp= Get-WmiObject -namespace root/ADFS -class SecurityTokenService
$temp.ConfigurationdatabaseConnectionstring="data source=<SQLCluster\SQLInstance>; initial catalog=AdfsConfigurationV4;integrated security=true"
$temp.put()
Get-WmiObject -namespace root/ADFS -class SecurityTokenService

start-service adfssrv

Set-AdfsProperties –artifactdbconnection "Data source=<SQLCluster\SQLInstance>;Initial Catalog=AdfsArtifactStore;Integrated Security=True"

En son olarak ADFS servisine restart atıyoruz. Ve sonunda Event Viewer bakarak herhangi bir hatanın olup olmadığını görmeliyiz. Event ID 100 adfs servisinin düzgün olarak başlatıldığını göstermektedir. ADFS WID TO SQL Migration bu aşamada tamamlanmaktadır.

ADFS Secondary sunucularında artık configuration değiştirmek gerekmektedir.

$temp= Get-WmiObject -namespace root/ADFS -class SecurityTokenService
$temp.ConfigurationdatabaseConnectionstring="data source=<SQLCluster\SQLInstance>; initial catalog=AdfsConfigurationV4;integrated security=true"
$temp.put()
Get-WmiObject -namespace root/ADFS -class SecurityTokenService

start-service adfssrv

Diğer ADFS yazılarımı aşağıdaki kategorilerden takip edebilirsiniz.