訓練
模組
使用 Azure 入口網站透過 Azure 私人端點連接 Azure SQL 伺服器 - Training
瞭解如何透過 Azure 入口網站安全地使用 Azure 私人端點連線 Azure SQL 伺服器,以確保與 SQL Server 的私人和安全通訊。
適用於:SQL Server
連線到 SQL Server 實例時,您可能會遇到下列 一或多個錯誤訊息。 本文提供一些步驟來協助您針對這些錯誤進行疑難排解,這些錯誤是根據從簡單到複雜的問題所排序。
完整的錯誤訊息會因應用程式和伺服器環境所使用的用戶端連結庫而有所不同。 您可以檢查下列詳細資料,以查看您是否遇到下列其中一個錯誤訊息:
此錯誤通常表示用戶端找不到 SQL Server 實例。 這個問題是因為至少下列其中一個問題存在而發生:
完整的訊息為:
已順利建立與伺服器的連接,但隨後在登入過程中發生錯誤。 (提供者: 共用記憶體提供者, 錯誤: 0 - 管道的另一端沒有進程。(Microsoft SQL Server,錯誤: 233)
此訊息表示 SQL Server 不會接聽共用記憶體或命名管道通訊協定。
建議您先使用下列其中一個選項來收集本節中所列的信息,然後再繼續進行實際步驟,以針對錯誤進行疑難解答。
如果您可以在本機登入 SQL Server 計算機並具有系統管理員存取權,請使用 SQLCHECK。 此工具提供在一個檔案中進行疑難排解所需的大部分資訊。 如需使用工具及其收集資訊的詳細資訊,請檢閱工具的首頁。 您也可以參閱建議的 必要條件 和檢查清單頁面。
在由裝載 SQL Server 執行個體的伺服器上,使用 SQL Server Configuration Manager 來驗證執行個體名稱:
注意
安裝 SQL Server 時,電腦上會自動安裝 Configuration Manager。 啟動 Configuration Manager 的指示會因 SQL Server 和 Windows 的版本而稍有不同。 如需版本特定的詳細資料,請參閱 SQL Server Configuration Manager。
登入有裝載 SQL Server 執行個體的電腦。
啟動 SQL Server 組態管理員。
在左側窗格中,選取 [SQL Server 服務]。
在右窗格中,確認資料庫引擎執行個體的名稱。
您可以使用下列步驟來取得有裝載 SQL Server 執行個體之電腦的 IP 位址。
在 [開始] 功能表上,選取 [執行]。 在 [執行] 視窗中,輸入 cmd,然後按一下 [確定]。
在 [命令提示字元] 視窗中輸入 ipconfig/all,並按下 [Enter]。 記下 IPv4 位址和 IPv6 位址。
注意
SQL Server 可以使用 IP 第 4 版通訊協定或 IP 第 6 版通訊協定進行連線。 您的網路可以允許其中之一或同時允許兩者。
在大部分情況下,您會使用 TCP 通訊協定連線到另一部電腦上的資料庫引擎。 若要取得執行個體的 TCP 連接埠,請依照下列步驟執行:
在執行 SQL Server 的電腦上使用 SQL Server Management Studio,並連接到 SQL Server 的執行個體。 在[物件總管] 中,依序展開 [管理]、[SQL Server 記錄],然後按兩下目前的記錄檔。
在 [記錄檔檢視器] 中,選取工具列上的 [篩選]。 在 [訊息包含文字] 方塊中,輸入 伺服器正在接聽、選取 [套用篩選],然後選取 [確定]。
應該列出「伺服器正在接聽 [ 'any' <ipv4> 1433]」 之類的訊息。
此訊息表示 SQL Server 的執行個體正在接聽此電腦上的所有 IP 位址, (IP 第 4 版) 和 TCP 連接埠 1433。 (TCP 連接埠 1433 通常是 資料庫引擎 或 SQL Server 預設實例所使用的埠。只有一個 SQL Server 實例可以使用此埠。如果已安裝一個以上的 SQL Server 實例,某些實例必須使用其他埠號碼。記下您嘗試連線之 SQL Server 實例所使用的埠號碼。
注意
若要確認執行個體正在執行,請選取 SQL Server Configuration Manager 中的 [SQL Server Services],然後檢查 SQL Server 執行個體的符號。
如果執行個體已停止,請以滑鼠右鍵按一下執行個體,然後選取 [啟動]。 然後,伺服器執行個體會啟動,而指標會變成綠色箭號。
您可以在 PowerShell 中使用下列命令來檢查系統上 SQL Server 服務的狀態:
Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -like "sql server*"}
您可以使用下列命令來搜尋特定字串的錯誤記錄檔:「SQL Server 現在已準備好進行用戶端連線。 這是一則資訊訊息;不需要進行任何使用者動作。」:
Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog | Select-String "SQL Server is now ready for client connections."
注意
只有針對具名執行個體的連線問題進行疑難排解時,才需要此步驟。
若要連線到具名執行個體,則必須已經執行 SQL Server Browser 服務。 在 SQL Server Configuration Manager 中,找出 SQL Server Browser 服務,並確認其正在執行中。 如果未執行,請啟動服務。 預設執行個體不需要 SQL Server 瀏覽器服務。
如需在您的環境中使用 SQL Server Browser 服務的詳細資訊,請參閱 SQL Server Browser 服務。
如需停止和啟動 SQL 服務的詳細資訊,請參閱啟動、停止、暫停、繼續、重新啟動 SQL Server 服務。
注意
如果您無法讓 SQL Server 瀏覽器服務在您的環境中執行,請參閱在不需要 SQL Server 瀏覽器服務的情況下連線到 SQL Server 具名執行個體。
當連接字串中指定了不正確的伺服器名稱時,您通常會遇到錯誤。 請確定伺服器名稱符合您在先前步驟中擷取的名稱。
注意
如果您使用 SQLCHECK 工具,請檢閱輸出檔案的 [計算機資訊] 區段中的 NetBios 名稱/FQDN 值。
當您使用替代名稱連線到 SQL Server,或在網路中遇到名稱解析問題時,通常會在用戶端環境中使用別名。 它們是使用 SQL Server Configuration Manager 或用戶端網路公用程式所建立。 不正確的別名可能會導致應用程式的連線連接到錯誤的伺服器,進而導致失敗。 請使用以下方法,檢查不正確的別名。 您也可以使用用戶端電腦上的工具 (例如 SQLCHECK),檢查用戶端電腦上的別名和各種其他連線相關設定。
注意
下列選項僅適用于使用 SQL Server Native Client 連線到 SQL Server 的應用程式。
範例輸出:
SQL 別名:
Alias Name Protocol Server Name Port 32-bit
---------- -------- ------------ ---- ------
prodsql TCP prod_sqlserver 1430
輸出指出 prodsql
,這是在 prod_sqlserver
埠 1430 上執行的 SQL Server 別名。
在 [SQL Server Configuration Manager] 中,展開 [SQL Server Native Client 設定],然後選取 [別名]。
檢查是否已為您嘗試連線的伺服器定義任何別名。
若已有別名,請依照下列步驟執行:
您可以根據預設執行個體或具名執行個體來驗證防火牆設定。
注意
如果您在網路中使用協力廠商防火牆,則概念仍然適用。 不過,您可能必須與網路系統管理員合作,或參閱防火牆產品文件,以取得有關設定防火牆以允許與 SQL Server 通訊所需連接埠的詳細資訊。
預設執行個體通常會在連接埠 1433 上執行。 某些安裝也會使用 (1433 以外的) 非標準連接埠來執行 SQL 執行個體。 防火牆可能會封鎖任一連接埠。 若要進一步檢查連接埠號碼,請依照下列步驟執行:
<servername>,<portnumber>
格式將 SQL Server 的連接埠號碼附加至伺服器名稱,並查看其是否可運作。 例如,您的 SQL 執行個體名稱為 MySQLDefaultinstance ,且正在連接埠 2000 上執行。 將伺服器名稱指定為 MySQLServer, 2000 ,並查看其是否可運作。
如果您的 SQL 執行個體是具名執行個體,它可能會設定為使用動態連接埠或靜態連接埠。 在任一情況下,基礎網路程式庫會透過 UDP 埠 1434 查詢在您 SQL Server 電腦上執行的 SQL Server Browser 服務,以列舉具名實例的埠號碼。 如果用戶端與伺服器之間的防火牆封鎖此 UDP 埠,用戶端程式庫就無法判斷埠(連線的需求),而且連線會失敗。 若要檢查連線,您可以使用下列其中一種方法:
方法 1:在連線字串中指定埠號碼來檢查連線。
<servername\instancename>,<portnumber>
附加至伺服器名稱的埠號碼來連線到具名實例,並查看是否可運作。 例如,如果您的 SQL 實例名稱為 MySQL\Namedinstance ,且正在埠 3000 上執行,請將伺服器名稱指定為 MySQL\Namedinstance,3000。
方法 2:使用 PortQryUI 工具檢查連線。
使用 PortQryUI 工具搭配您的具名實例,並觀察產生的輸出。 您可能會看到 UDP 埠 1434 已篩選的訊息。 此訊息表示埠已在網路上遭到封鎖。 如需如何使用工具的指示,請參閱搭配使用 PortQryUI 工具與 SQL Server。
檢查 SQL Server 實例是否正在接聽動態或靜態連接埠。 然後使用與您的案例相關的下列方法。 如果您不確定,請參閱如何檢查 SQL Server 是否正在接聽動態埠或靜態埠。
在某些 SQL Server 安裝中,除非系統管理員手動啟用,否則不會啟用從另一部電腦到 Database Engine 的連線。 您可以使用下列其中一個選項來檢查並啟用必要的通訊協定,以允許遠端連線到 SQL Server Database Engine。
搜尋 SQLCHECK 輸出檔案以取得「SQL Server 實例的詳細數據」區段,並找出 SQL Server 實例的資訊區段。
在此部分,尋找下表所列的值,以判斷是否已啟用 SQL Server 通訊協定:
值名稱 | 意義 | 其他相關資訊 |
---|---|---|
已啟用共用記憶體 | 可以為 true 為 false - 只會影響本機連線。 | 使用共用記憶體通訊協定建立有效的連接字串 |
已啟用具名管道 | 如果為 false,則使用具名管道的本機和遠端連線都會失敗 | 選擇網路通訊協定 |
已啟用 TCP | 如果為 false,則使用 TCP/IP 的本機和遠端連線都會失敗。 注意大部分的 SQL Server 安裝都使用 TCP/IP 作為伺服器與用戶端之間的通訊協定。 |
選擇網路通訊協定 |
使用 SQL Server 組態管理員或 SQL Server PowerShell 來啟用必要的通訊協定。 如需詳細資訊,請參閱 啟用或停用伺服器網路通訊協定。
注意
啟用通訊協定之後,必須停止並重新啟動 Database Engine,變更才會生效。
若要使用 SQL Server 組態管理員從另一部電腦啟用連線,請遵循下列步驟:
使用 TCP/IP 連線到 SQL Server 需要 Windows 建立連線。 您可以使用下列步驟,使用 ping 工具來測試 TCP 連線能力。
ping
以及執行 SQL Server 之電腦的 IP 位址。 例如:ping 192.168.1.101
ping fe80::d51d:5ab5:6f09:8f48%11
ping
會傳回 Reply from <IP address>
,後面接著一些其他資訊。 如果 ping
傳回 Destination host unreachable
或 Request timed out
,則表示未正確設定 TCP/IP。 此時的錯誤表示存在用戶端電腦、伺服器電腦或路由器等網路相關問題。 若要針對網路問題進行疑難排解,請參閱 TCP/IP 問題的進階疑難排解。ping
測試成功,請測試電腦名稱是否可以解析為 TCP/IP 位址。 在用戶端電腦的 [命令提示字元] 視窗中,輸入 ping 和執行 SQL Server 的電腦名稱。 例如: ping newofficepc
。Destination host unreachable
或 Request timed out
,您的用戶端電腦上快取的名稱解析資訊可能是舊的 (過時)。 請輸入 ipconfig /flushdns
以清除 DNS (動態名稱解析) 快取。 然後再次依名稱 ping 電腦。 當 DNS 快取為空時,用戶端電腦會檢查伺服器電腦 IP 位址的最新資訊。ping
會傳回 Reply from <IP address>
,後面接著一些其他資訊。 如果您可以透過 IP 位址成功偵測伺服器電腦,但在依電腦名稱稱偵測時收到錯誤,例如 Destination host unreachable
或 Request timed out
,則表示名稱解析未正確設定。 如需詳細資訊,請參閱如何針對基本 TCP/IP 問題進行疑難排解。 連線到 SQL Server 不需要成功的名稱解析。 不過,如果無法將電腦名稱解析為 IP 位址,則必須建立連線以指定 IP 位址。 稍後可以修正名稱解析。注意
您也可以使用 Test-NetConnection 或 Test-Connection Cmdlet,根據電腦上安裝的 PowerShell 版本來測試 TCP 連線能力。 如需有關 PowerShell Cmdlet 的詳細資訊,請參閱 Cmdlet 概觀。
在針對另一部電腦的連線問題進行疑難排解之前,請先測試從本機安裝在執行 SQL Server 之電腦上的用戶端應用程式連線的能力。 本機連線可避免網路和防火牆發生問題。
此程式需要 SQL Server Management Studio。 如果您尚未安裝 Management Studio,請參閱下載 SQL Server Management Studio (SSMS)。
如果您無法安裝 Management Studio,您可以使用 sqlcmd.exe 公用程式來測試連線。 sqlcmd.exe 隨資料庫引擎一起安裝。 如需 sqlcmd.exe 的相關資訊,請參閱 sqlcmd 公用程式。
使用可存取 SQL Server 的登入,登入安裝 SQL Server 的電腦。 在安裝期間,SQL Server 需要至少將一個登入指定為 SQL Server 系統管理員。 如果您不知道系統管理員,請參閱當系統管理員被鎖定時連線到 SQL Server。
在 [開始] 頁面上輸入 SQL Server Management Studio,或在舊版 Windows 的 [開始] 功能表上,選取 [所有程式],選取 [Microsoft SQL Server],然後選取 [SQL Server Management Studio]。
在 [連線] 下拉式功能表上,選取 [資料庫引擎]。 在 [驗證] 方塊中,選取 [Windows 驗證]。 在 [伺服器名稱] 方塊中,輸入下列其中一種連線類型:
連線到 | 類型 | 範例 |
---|---|---|
預設執行個體 | <computer name> |
ACCNT27 |
具名執行個體 | <computer name\instance name> |
ACCNT27\PAYROLL |
注意
從相同電腦上的用戶端應用程式連線到 SQL Server 時,會使用共用記憶體通訊協定。 共用記憶體是一種本機具名管道,因此您有時會遇到與管道相關的錯誤。
如果您此時收到錯誤,您必須先解決它,才能繼續進行。 您的登入可能未獲得連線授權。 您的預設資料庫可能遺失。
注意
您無法對問題進行疑難排解,因為某些錯誤訊息會刻意傳遞給用戶端。 這是一項安全性功能,可避免向攻擊者提供 SQL Server 的相關資訊。 若要檢視錯誤的詳細資料,請參閱 SQL Server 錯誤記錄檔。
如果您收到使用者登入失敗的錯誤 18456,《線上叢書》文章 MSSQLSERVER_18456 包含錯誤碼的其他相關資訊。 Aaron Bertrand 的部落格在 疑難排解錯誤 18456 (外部連結) 也有廣泛的錯誤碼清單。 您可以在 物件總管 的 [管理] 區段中,使用 SSMS 檢視錯誤記錄檔(如果可以連線)。 否則,您可以使用 Windows 記事本程式來檢視錯誤記錄檔。 預設位置會隨著您的版本而有所不同,而且可以在安裝期間變更。 SQL Server 2019 (15.x) 的預設位置是 C:\Program Files\Microsoft SQL Server\MSSQL15。MSSQLSERVER\MSSQL\Log\ERRORLOG。
如果您可以使用共用記憶體進行連線,請使用 TCP 測試連線。 您可以在名稱之前指定 tcp:
,以強制執行 TCP 連線。 以下提供一些範例:
連線到: | 輸入: | 例如: |
---|---|---|
預設執行個體 | tcp:<computer name> |
tcp:ACCNT27 |
具名執行個體 | tcp:<computer name/instance name> |
tcp:ACCNT27\PAYROLL |
如果您可以使用共用記憶體進行連線,但不能使用 TCP 進行連線,則必須修正 TCP 問題。 最有可能的問題是 TCP 未啟用。 若要啟用 TCP,請參閱步驟 6:在 SQL Server 上驗證已啟用的通訊協定。
如果您的目標是使用系統管理員帳戶以外的帳戶進行連線,您可以從以系統管理員身分連線開始。 然後,嘗試使用 Windows 驗證登入或用戶端應用程式所使用的 SQL Server 驗證登入再次連線。
當您可以在同一部電腦上使用 TCP 進行連線後,就可以嘗試從用戶端電腦進行連線。 您可以使用任何用戶端應用程式,但為了避免複雜性,請在用戶端上安裝 SQL Server 管理工具。 安裝之後,請嘗試使用 SQL Server Management Studio。
192.168.1.101,1433
。 如果此連線失敗,您可能有下列其中一個問題:ping
無法運作。 這表示一般 TCP 設定問題。 返回步驟 7:測試 TCP/IP 連線能力一節。192.168.1.101\<instance name>
。) 如果此動作無法運作,表示不會將連接埠號碼傳回給用戶端。 此問題與 SQL Server 瀏覽器服務相關,該服務會將具名執行個體的連接埠號碼提供給用戶端。 以下是解決方案:tcp:
放在電腦名稱前面,以強制 TCP/IP 連線。 例如,針對電腦上名為 ACCNT27 的預設執行個體,請使用 tcp:ACCNT27
。 針對名為 PAYROLL 的具名執行個體,在該電腦上使用 tcp:ACCNT27\PAYROLL
。 如果您可以使用 IP 位址進行連線,但無法使用電腦名稱進行連線,則會有名稱解析問題。 返回步驟 7:測試 TCP/IP 連線能力一節。如果您使用命名管道進行連線,請檢查使用者是否有權登入 Windows。 如需詳細資訊,請參閱 針對命名管道連線問題進行疑難解答。
訓練
模組
使用 Azure 入口網站透過 Azure 私人端點連接 Azure SQL 伺服器 - Training
瞭解如何透過 Azure 入口網站安全地使用 Azure 私人端點連線 Azure SQL 伺服器,以確保與 SQL Server 的私人和安全通訊。