因應世界未來的安全走向與公司政策,主機都將 TLS 1.0 1.1 關閉,
而這時有個資料庫主機搬遷案是先建後拆的工法,
想當然簡單,一做就是好幾天去了(啃),
原因都卡在 TLS 1.0 1.1 都關閉了,安裝一直失敗…
環境:Windows 2012 R2 (TLS 1.0 1.1 關閉、1.2 開啟)
筆者起初安裝的是 SQLServer 2014 Std 版本,並沒有連同 SQLServer 2014 SP3 一併執行,
不管怎麼安裝都卡在以下的畫面,
「找不到 Database Engine 啟動控制代碼」
找了 SQLServer 的 Log,有發現與安全連線有關的訊息,
TDSSNIClient initialization failed with error 0x139f, status code 0x80. Reason: Unable to initialize SSL support. The group or resource is not in the correct state to perform the requested operation.
後來經 Google 後,與 SSL、TLS 設定有相關,
詢問主機單位負責人才知道有關閉了 TLS 1.0 1.1,
與主機單位負責人溝通後,先開啟 TLS 1.0 1.1,原 TLS 2.0 已開啟就不動,
安裝完畢後,再關閉,
結果,訊息又不一樣了 (慘烈烈),
「用戶端與伺服器無法溝通,因為它們沒有公用的演算法」
與另一個訊息
連接已成功建立與伺服器,但登入前交握期間發生錯誤。(提供者︰ 具名管道提供者,錯誤︰ 0-沒有處理程序是管道另一端。)
感覺是與連線端的程式有關,經查微軟文件有說明 SQLServer SqlClient 支援的是 .net 2.0,
但若沒有更新的話,會不支援 TLS 1.2,
只能好好的下去下載微軟提供的更新軟體 (https://support.microsoft.com/en-us/help/3106993),
安裝完後,還是有問題,因此採用另一種安裝方式,
將安裝的設定檔修改 UpdateSource 的來源,
這種方式可以將 SP3、CUx的版本都放在一起,
讓安裝光碟先抓到這些更新檔並安裝後,
再來安裝SQLServer的服務,
筆者有放置了 SP3 與 SP43CU4 的版本
SQLServer2014-KB4500181-x64.exe
SQLServer2014SP3-KB4022619-x64.exe
實際上的安裝方式是用 cmd 的模式,目錄切換到安裝光碟裡,再下以下的指令 (設定檔目錄位置由實際環境做更改)
setup.exe /CONFIGURATIONFILE="C:\SQLServerSoft\ConfigurationFile.ini"
以下是 Primary 的安裝設定檔內容
;SQL Server 2014 Configuration File
[OPTIONS]
; 指定安裝程式工作流程,例如 INSTALL、UNINSTALL 或 UPGRADE。這是必要參數。
ACTION="InstallFailoverCluster"
; 使用 /ENU 參數在當地語系化的 Windows 作業系統上安裝英文版的 SQL Server。
ENU="False"
; 控制使用者介面行為的參數。完整 UI 的有效值為 Normal,而簡單 UI 的有效值為 AutoAdvance,略過 Server Core 安裝程式 GUI 封鎖的有效值則為 EnableUIOnServerCore。
UIMODE="Normal"
; 安裝程式不會顯示任何使用者介面。
QUIET="False"
; 安裝程式只會顯示進度,沒有任何使用者互動。
QUIETSIMPLE="False"
; 指定 SQL Server 安裝程式應否探索並包含產品更新。有效值是 True 和 False 或 1 和 0。根據預設,SQL Server 安裝程式會包含發現的更新。
UpdateEnabled="1"
; 指定能否向 Microsoft 報告錯誤,以改進未來的 SQL Server 版本。若要啟用此功能,請指定 1 或 True。若要停用,請指定 0 或 False。
ERRORREPORTING="False"
; 如果提供這個參數,這部電腦將會使用 Microsoft Update 來檢查更新。
USEMICROSOFTUPDATE="False"
; 指定要安裝、解除安裝或升級的功能。最上層功能的清單包括 SQL、AS、RS、IS、MDS 和 Tools。SQL 功能會安裝 Database Engine、複寫、全文檢索和 Data Quality Services (DQS) 伺服器。Tools 功能則會安裝管理工具、線上叢書元件、SQL Server Data Tools 和其他共用元件。
FEATURES=SQLENGINE,REPLICATION,FULLTEXT,DQ,DQC,CONN,IS,SDK,SSMS,ADV_SSMS,SNAC_SDK
; 指定 SQL Server 安裝將取得產品更新的位置。有效值是 "MU" (搜尋 Microsoft Update)、有效資料夾路徑、相對路徑 (如 .\MyUpdates) 或 UNC 共用。根據預設,SQL Server 安裝程式會透過 Window Server Update Services 搜尋 Microsoft Update 或 Windows Update 伺服器。
UpdateSource="C:\SQLServerSoft"
; 顯示命令列參數使用方式
HELP="False"
; 指定應將安裝程式記錄檔送到主控台。
INDICATEPROGRESS="False"
; 指定安裝程式應安裝至 WOW64。IA64 或 32 位元系統不支援這個命令列引數。
X86="False"
; 指定共用元件的根安裝目錄。這個目錄在共用元件安裝後會保持不變。
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
; 指定 WOW64 共用元件的根安裝目錄。這個目錄在 WOW64 共用元件安裝後會保持不變。
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
; 指定預設或具名執行個體。MSSQLSERVER 是非 Express 版的預設執行個體,而 SQLExpress 則是 Express 版的預設執行個體。安裝 SQL Server Database Engine (SQL)、Analysis Services (AS) 或 Reporting Services (RS) 時需要這個參數。
INSTANCENAME="MSSQLSERVER"
; 指定能否收集 SQL Server 功能的使用方式資料,並傳送至 Microsoft。若要啟用此功能,請指定 1 或 True。若要停用,請指定 0 或 False。
SQMREPORTING="False"
; 指定您為 SQL Server 功能指定的執行個體識別碼。SQL Server 目錄結構、登錄結構和服務名稱都會納入 SQL Server 執行個體的執行個體識別碼。
INSTANCEID="MSSQLSERVER"
; 指定安裝目錄。
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
; 指定叢集共用磁碟,以便與 SQL Server 容錯移轉叢集執行個體建立關聯。
FAILOVERCLUSTERDISKS="叢集磁碟 3"
; 為 SQL Server 容錯移轉叢集執行個體指定叢集群組的名稱。
FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)"
; 指定編碼的 IP 位址。此編碼以分號分隔 (;),並且遵循格式 <IP Type>;<address>;<network name>;<subnet mask>。支援的 IP 類型包括 DHCP、IPV4 和 IPV6。
FAILOVERCLUSTERIPADDRESSES="IPv4;xxx.xxx.xxx.xxx;叢集網路 2;255.255.255.0"
; 指定 SQL Server 容錯移轉叢集執行個體的名稱。這個名稱是用來連接至 SQL Server 服務的網路名稱。
FAILOVERCLUSTERNETWORKNAME="SQLServerSV"
; Agent 帳戶名稱
AGTSVCACCOUNT="ADDomain\ClusterAccount"
; Integration Services 的啟動類型。
ISSVCSTARTUPTYPE="Automatic"
; Integration Services 的帳戶: Domain\User 或系統帳戶。
ISSVCACCOUNT="NT Service\MsDtsServer120"
; CM 基礎構件 TCP 通訊埠
COMMFABRICPORT="0"
; 矩陣將如何使用私人網路
COMMFABRICNETWORKLEVEL="0"
; 基礎構件間的通訊將如何受到保護
COMMFABRICENCRYPTION="0"
; CM 基礎構件所使用的 TCP 通訊埠
MATRIXCMBRICKCOMMPORT="0"
; 要啟用 FILESTREAM 功能的層級在 (0、1、2 或 3)。
FILESTREAMLEVEL="0"
; 指定要使用於 Database Engine 的 Windows 定序或 SQL 定序。
SQLCOLLATION="Chinese_Taiwan_Stroke_CI_AS"
; SQL Server 服務的帳戶: 網域\使用者或系統帳戶。
SQLSVCACCOUNT="ADDomain\ClusterAccount"
; 要提供為 SQL Server 系統管理員的 Windows 帳戶。
SQLSYSADMINACCOUNTS="ADDomain\Admin"
; 預設為 Windows 驗證。請使用混合模式驗證的 "SQL"。
SECURITYMODE="SQL"
; Database Engine 根資料目錄。
INSTALLSQLDATADIR="D:"
; 加入輸入引數 FTSVCACCOUNT 的描述
FTSVCACCOUNT="NT Service\MSSQLFDLauncher"
這樣就可以完成安裝好第一台啦~
至於 Standby 那台的設定檔如下,
;SQL Server 2014 Configuration File
[OPTIONS]
; 指定安裝程式工作流程,例如 INSTALL、UNINSTALL 或 UPGRADE。這是必要參數。
ACTION="AddNode"
; 使用 /ENU 參數在當地語系化的 Windows 作業系統上安裝英文版的 SQL Server。
ENU="False"
; 控制使用者介面行為的參數。完整 UI 的有效值為 Normal,而簡單 UI 的有效值為 AutoAdvance,略過 Server Core 安裝程式 GUI 封鎖的有效值則為 EnableUIOnServerCore。
UIMODE="Normal"
; 安裝程式不會顯示任何使用者介面。
QUIET="False"
; 安裝程式只會顯示進度,沒有任何使用者互動。
QUIETSIMPLE="False"
; 指定 SQL Server 安裝程式應否探索並包含產品更新。有效值是 True 和 False 或 1 和 0。根據預設,SQL Server 安裝程式會包含發現的更新。
UpdateEnabled="True"
; 指定能否向 Microsoft 報告錯誤,以改進未來的 SQL Server 版本。若要啟用此功能,請指定 1 或 True。若要停用,請指定 0 或 False。
ERRORREPORTING="False"
; 如果提供這個參數,這部電腦將會使用 Microsoft Update 來檢查更新。
USEMICROSOFTUPDATE="False"
; 指定 SQL Server 安裝將取得產品更新的位置。有效值是 "MU" (搜尋 Microsoft Update)、有效資料夾路徑、相對路徑 (如 .\MyUpdates) 或 UNC 共用。根據預設,SQL Server 安裝程式會透過 Window Server Update Services 搜尋 Microsoft Update 或 Windows Update 伺服器。
UpdateSource="C:\SQLServerSoft"
; 顯示命令列參數使用方式
HELP="False"
; 指定應將安裝程式記錄檔送到主控台。
INDICATEPROGRESS="False"
; 指定安裝程式應安裝至 WOW64。IA64 或 32 位元系統不支援這個命令列引數。
X86="False"
; 指定預設或具名執行個體。MSSQLSERVER 是非 Express 版的預設執行個體,而 SQLExpress 則是 Express 版的預設執行個體。安裝 SQL Server Database Engine (SQL)、Analysis Services (AS) 或 Reporting Services (RS) 時需要這個參數。
INSTANCENAME="MSSQLSERVER"
; 指定能否收集 SQL Server 功能的使用方式資料,並傳送至 Microsoft。若要啟用此功能,請指定 1 或 True。若要停用,請指定 0 或 False。
SQMREPORTING="False"
; 為 SQL Server 容錯移轉叢集執行個體指定叢集群組的名稱。
FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)"
; 表示接受對 SQL Server 多重子網路容錯移轉叢集之 IP 位址資源相依性類型的變更。
CONFIRMIPDEPENDENCYCHANGE="False"
; 指定編碼的 IP 位址。此編碼以分號分隔 (;),並且遵循格式 <IP Type>;<address>;<network name>;<subnet mask>。支援的 IP 類型包括 DHCP、IPV4 和 IPV6。
FAILOVERCLUSTERIPADDRESSES="IPv4;xxx.xxx.xxx.xxx;叢集網路 2;255.255.255.0"
; 指定 SQL Server 容錯移轉叢集執行個體的名稱。這個名稱是用來連接至 SQL Server 服務的網路名稱。
FAILOVERCLUSTERNETWORKNAME="SQLServerSV"
; Agent 帳戶名稱
AGTSVCACCOUNT="ADDomain\ClusterAccount"
; SQL Server 服務的帳戶: 網域\使用者或系統帳戶。
SQLSVCACCOUNT="ADDomain\ClusterAccount"
; Add description of input argument FTSVCACCOUNT
FTSVCACCOUNT="NT Service\MSSQLFDLauncher"
以上就可以完裝完畢啦~
參考資料:
當您在已啟用的 TLS 1.2 的伺服器上安裝 SQL Server 2012年或 SQL Server 2014年的修正程式︰ 錯誤
Disabling TLS 1.0 with MS SQL 2012/2014 – Services won’t start & SSMS fails to connect
已轉向 blogger 記錄
https://slowlife-notes.blogspot.com