Azure SQL 透過 Azure VPN Gateway 實現內網連接

Error 40532 坑,趕緊紀錄一下!

2022/4/27 坑

開發時會遇到連線失敗,主體名稱不正確之類的訊息

結論:需要信任伺服器端憑證

TrustServerCertificate=true

Server=10.10.0.2;Database=test;user id=test;password=test;TrustServerCertificate=true;

說明:

應該是因為原本憑證是發給 database.windows.net

但是我們這邊用的是用 IP 導致憑證驗證失敗

所以在地端開發時直接信任伺服器端憑證

發佈到 Azure App Service 時

如果是直接連 TestDbServerName.database.windows.net

就不需要設定 TrustServerCertificate=true


2021/8/31 坑

VPN 連線後 SQL Server 發生「無法產生 SSPI 內容」錯誤 | The Will Will Web (miniasp.com)


結論:SQL 登入帳號後面要加上 @伺服器名稱

例如原本 SQL Server = TestDbServerName.database.windows.net

登入帳號為 Admin

用 VPN 在 SSMS 的帳號欄位要輸入 Admin@TestDbServerName

否則會得到錯誤:40532

參照:在使用者名中明確提供伺服器名稱,用於Azure SQL DB、MySQL 和后格雷斯QL - 微軟技術社區 (microsoft.com)


Step 1:建立 Azure VPN Getway

這邊見的時候可能先看一下目前自己的內網 IP 網段是甚麼

在建立 Vnet 的時候網段要錯開

比如公司內網 10.0.0.x

手機分享網路 192.168.0.x

那建立 Vnet 的時候就不要用 10.0.x.x or 192.168.x.x

參照:使用 P2S VPN 連線至 VNet & 憑證驗證:入口網站 - Azure VPN Gateway | Microsoft Docs


Step 2:建立 SQL 私人端點

建完就有個內網 IP 稍微記一下等等連到資料庫的時候要用

參照:Tutorial: Connect to an Azure SQL server using an Azure Private Endpoint - Portal | Microsoft Docs


Step 3:安裝 VPN 並連線

就把 Step 1 的私人憑證匯入到每個要連線的電腦

然後把從 Azure 下載回來的 CA 可能也要匯入到信任的根憑證

再安裝 Azure 下載的 x64 VPN Clinet

就會在電腦右下網路裡面看到該 VPN

按連線理論上就可以成功了


Step 4:測試連線

設定完並連結 VPN 後可以在 PowerShell (電源殼?) 輸入以下命令測試連線

Test-NetConnection 10.0.0.4 -Port 1433

P.S. 這邊假定 SQL 私人端點分配的內網 IP 為 10.0.0.4 請依照實際分配位置輸入

注意:這邊一定要指定 1433 Port, ping 應該是關掉不會過的, 回想起來我因此卡了很久


Step 5:使用 SSMS 登入

輸入 SQL 私人端點分配的內網 IP 當作 SQL Server Host

然後將帳號後面加上 @SQL伺服器名稱 (參照開頭的結論部分)

密碼就一樣

理論上就可以不用開 WAN IP 白名單

也可以連到 Azure SQL


Note:

PS5