##EasyReadMore##

顯示具有 SQL Server 標籤的文章。 顯示所有文章
顯示具有 SQL Server 標籤的文章。 顯示所有文章

2013年6月7日 星期五

How to migrate ADFS Configuration database from Windows Internal Database (WID) to SQL Server


真不知道寫這個在台灣會有誰用到,不過過程真的太艱辛了,要寫一篇來紀念一下

ADFS 是 AD 的 Federation Service,主要就是讓外部的服務可以透過 FS 主機利用 AD 去進行驗證,達到 Single Sign On 的目標,為 Windows Server 裡面的一個角色:





      預設裝起來的話很快就裝好了,你甚至可以把 ADFS 第二台、第三台加進去讓他變成一個同盟,可以同時提供高可用性的服務,這在 2008R2 比較難,因為 2008R2 預設是 ADFS 1.0,必須另外獨立裝 ADFS2.0,Server 2012 就好多了,直接內建 2.0。
那為什麼要把 Configuration 資料搬到 SQL Server 呢?

         因為預設的 Configuration 資料是放在 WID 的,就是 Windows Internal Database,內建的小資料庫,微軟很不夠意思的在官網上講,如果你把 ADFS 的資料放在 WID 的話....... 我們來看一下官方的解釋:


  • No more than five federation servers should be added to a federation server farm deployment. If you need more federation servers to support higher performance in farm deployment, use SQL Server instead.
  • No more than 100 trust relationships of the same type (either claims provider trusts or relying party trusts) can be supported. For example, you can have up to 100 claims provider trusts and 100 relying party trusts with a Windows Internal Database deployment, but to exceed this number for either category of trusts, use SQL Server instead.


         第一點還好,就是不能放超過五台同盟,我也不知道什麼巨大規模需要超過五台,我們學校四五萬人我估個四台都覺得太高估了,但是第二點頭就比較大了,他竟然不能超過一百筆的信任關係,一個網址進來進行認證,就算一個,我們學校的校務系統加上其他三姑六婆一定都超過一百組,那就會造成很大的困擾,只好咬牙開始轉移了!



首先你要先準備以下的材料:

  • ADFS Server 2~4 台: 就是乾淨的 Server 2012 加上 ADFS 的角色,還不要加同盟喔,推薦千萬要先快照 (Snapshot) 一次,這樣就算做錯大不了重來就好,Hyper-V 3.0 快照超快,不用省這幾秒。
  • 在第一台 ADFS 裝 SQL Server Management Studio : 我們需要用到 sqlcmd 這個小工具,所以要先花時間裝一下,Express 或是正式版都可以,可以到微軟下載 Express 版。
  • SQL Server 一台: 建議開啟 SQL 驗證,不然跨網域就有點麻煩了!





Step.1 將 ADFS 的服務停止,並將資料庫檔案卸載並搬出
--------------------------------------------------------------------------------
開啟工程師的好朋友 Command Prompt,記得要按右鍵"以系統管理員身分執行",然後輸入:

net stop adfssrv

把 ADFS 的服務停掉,沒有用系統管理員身分就會存取被拒,其實直接去服務關掉也是可以,沒辦法,打指令比較帥嘛~~

接下來要把 WID 上面的資料庫先卸載,打開 PowerShell,輸入以下指令:

    sqlcmd -S \\.\pipe\MICROSOFT##WID\tsql\query
    use master
    go         
    sp_detach_db 'adfsconfiguration'
    go
    sp_detach_db 'adfsartifactstore'
    go

微軟非常認 (ㄐㄧㄢ) 真 (ㄓㄚˋ) 的把 WID 目錄在 Server 2012 改了,如果各位有去 Google 就會發現,以下是差別:

Server 2008R2:
sqlcmd -S \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query

Server 2012:
sqlcmd -S \\.\pipe\MICROSOFT##WID\tsql\query


如果你在 2012 執行,會發現下了根本沒反應,因為路徑根本就換了啊~~~~,以前是在 C:\Windows\SYSMSI\SSEE\MSSQL.2005\MSSQL\Data
現在的路徑已經改到了 C:\Windows\WID\Data 下面,由此可見,很多指令都要重找,不然一定會常常碰壁。






Step.2 把資料庫檔案移動到 SQL SERVER 資料庫主機下
------------------------------------------------------------------------------
卸載了之後,到 C:\Windows\WID\Data 下,把兩個資料庫檔案跟兩個 LOG 檔

adfsconfiguration.mdf
adfsconfiguration_log.ldf
adfsartifactstore.mdf
adfsartifactstore_log.ldf

這四個檔複製到 SQL Server 的目錄下,看要哪裡都可以,跟其他 MDF 放在一起也可以。




Step.3 把 ADFS 的資料庫在 SQL Server 掛載起來
------------------------------------------------------------------------------

麻煩打開 Windows 工程師另外一個好朋友 Powershell,輸入以下指令:

sqlcmd -S \\.\pipe\MICROSOFT##WID\tsql\query  --Server2012
use master
go
sp_attach_db 'adfsconfiguration', 'F:\MSSQL11.MSSQLSERVER\MSSQL\DATA\adfsconfiguration.mdf', 'F:\MSSQL11.MSSQLSERVER\MSSQL\DATA\adfsconfiguration_log.ldf'
go
sp_attach_db 'adfsartifactstore', 'F:\MSSQL11.MSSQLSERVER\MSSQL\DATA\adfsartifactstore.mdf', 'F:\MSSQL11.MSSQLSERVER\MSSQL\DATA\adfsartifactstore_log.ldf'
go
alter database AdfsConfiguration set enable_broker with rollback immediate
go

* 裡面的路徑就是你放 mdf 檔跟 ldf 檔的地方喔

成功的話,就可以在你的 SQL Server 下面看到 configuration 跟 artifactstore 資料庫了!






Step.4 把 ADFS 的 Configuration 資料庫設定切到 SQL Server
------------------------------------------------------------------------------
做了這個步驟 ADFS 才會去存取 SQL Server 的資料庫 請用系統管理員身分執行 Powershell 輸入:

$temp=GEt-WmiObject -namespace root/ADFS -class SecurityTokenService
$temp.ConfigurationdatabaseConnectionstring="data source=yourdatasource;initial catalog=adfsconfiguration;User ID=username;Password=password;"
$temp.put()


這邊記住一定要”以系統管理員身分執行”,不然最後 $temp.put() 會說傳了一個無效值 0,其實就是權限不足,這邊困擾我好久,還想說用別的方法改設定,最後沒想到是這麼簡單的解決方法!



Step.5 啟動 ADFS 服務
------------------------------------------------------------------------------
以系統管理員身分執行 Command Prompt,輸入

net start adfssrv

可以啟動代表你剛剛切換有成功!



Step.6  把 ADFS 的 artifactdbconnection 設定切到 SQL Server
------------------------------------------------------------------------------
記得我們剛剛移轉了兩個資料庫嗎? 現在要把另外一個設定也切過去,請用系統管理員身分執行 Powershell 輸入:

Add-pssnapin microsoft.adfs.powershell
Set-adfsproperties –artifactdbconnection “data source=DATASOURCE; initial catalog=adfsartifactstore;integrated security=true”



Step.7  重新啟動 ADFS 服務
------------------------------------------------------------------------------
以系統管理員身分執行 Command Prompt,輸入

net stop adfssrv
net start adfssrv

成功的話代表兩個資料庫都切換到 SQL Server 了! 恭喜!



Step.8  把 ADFS Server 加入同盟伺服器
------------------------------------------------------------------------------
剛剛只做了第一台,現在要把其他幾台也加進去同盟伺服器
請確定以下事情都準備好了:

  • 有加入網域
  • ADFS 角色安裝完畢
  • ADFS 憑證有 import 進去且是正常的
  • 在 IIS 把憑證繫結 Default Web Site 的 443 PORT


第三點的意思是,你要在憑證管理裡面看到憑證是沒有問題的才 OK。



第四點沒有做好等一下加入同盟伺服器會有警告出現。


因為如果把 Cofig 資料搬到 SQL Server 的話,就不能用精靈加入同盟,一定要利用指令方式使用 ADFS 目錄下的 FsConfig.exe 裡面的 JoinSqlFarm 指令才可以加入,請用管理員身分打開 Command Prompt,到 ADFS 所在的目錄下 C:\Windows\ADFS  輸入:

FsConfig.exe JoinSQLFarm /ServiceAccount Domain\AccountName /ServiceAccountPassword Password /SQLConnectionString "data source=YourDataSource;initial catalog=adfsconfiguration;User ID=username;Password=password;"


如果之前沒有在 IIS 把憑證繫結成功 會有以下錯誤畫面:



成功的話就像以下這樣:


接下來就把剩下的 ADFS 主機一一加入,就大功告成!!

2013年6月5日 星期三

安裝SQL Server 2012 容錯移轉叢集 Cluster 筆記第三篇 - 完成安裝MS SQL Server 2012 Cluster





只建了一台當然還不算 Cluster, 接著我們繼續裝第二台



選擇"將節點加入到 SQL Server 容錯移轉叢集"



選擇要加入的個體, 如果是預設應該是 MSSQLSERVER

勾選就好 
輸入剛剛安裝的密碼


沒錯就可以開始安裝



 安裝成功的話就可以在叢集移轉管理員裡面看到 SQL SERVER 了, 試著在節點間移動, 都沒有錯誤訊息的話就算安裝成功!





我自己也是裝了兩次才成功, 因為要注意的點太多, 我想獨力安裝都可以學到很多才是, 要是順利到底的話就太可惜了 (誤)!

跟 2008 比起來安裝的難度是差不多的, 概念也是相同, 總之看畫面做也是有可能出錯的, 好好想想每個細節吧!


2013年6月4日 星期二

安裝SQL Server 2012 容錯移轉叢集Cluster筆記第二篇 - 安裝MS SQL Server 2012 Cluster





之前那一篇把底層建起來了 (安裝 SQL Server 2012 Cluster-- 建立 Windows Server 2012 容錯移轉叢集)
這一篇就來講一下 SQL Server 的安裝
由於因為 Cluster 的架構, 所以安裝跟單機版有點不同

主要分成兩個部分

  • 安裝 Microsoft 分散式交易協調器
  • 安裝 SQL Server Cluster

分散式交易調節器 (Distributed Transaction Coordination) 就是負責管理各種交易 (Transaction),負責處理多個不同資料來源的資料,進行交易處理,確保跨伺服器間的各種複雜操作,SQL Server 如果要裝在叢集上, 就是透過 DTC 服務進行跨伺服器的溝通交易存取。


容錯移轉叢集管理員 --> 角色 --> 設定角色

按下一步

新增分散式交易協調器 (DTC)

輸入 DTC 名稱及 IP

因為筆者這邊忘記截圖... 應該要選之前設定的 1GB CSV(Cluster Share Volume)

建完之後去叢集管理員就會看到這個小東西

確定資源都有上線


測試一下可不可以移轉 對著 DTC 服務選移動 然後選取節點

開始進行移轉.........
順利在第二個節點執行代表設定成功!

安裝 SQL Server 2012 Cluster


因為 Server 2012 支援直接開啟 ISO,所以可以直接雙點 ISO 檔,就可以把這個 ISO 檔掛載到光碟機下
選擇"新的 SQL Server 容錯移轉叢集安裝"


會有一些前置的檢查更新作業...... 按下一步
會進行安裝前置檢查
下一步

選擇必要的元件安裝
設定 SQL Server 的網路名稱 然後設定執行個體 如果第一次安裝就選預設

會出現需要的磁碟空間
預設叢集資源群組名稱為 MSSQLSERVER, 這三個紅色只是提醒你而已 不要擔心, 繼續下一步!
可以勾選之前沒用的 CSV 了
要設定 SQL SERVER 的 IP (有沒有覺得要準備很多 IP....)
 設定可以存取 SQL Server 的密碼
設定驗證模式還有指派管理員帳號
第二個分頁就可以設定各個檔案目錄
確定設定 OK 的話就開始安裝
這個畫面要看很久......
安裝完就會看到 SQL Server 的角色出現, 但是還不能移轉, 因為第二台還沒裝
看到全部都是線上就代表成功了