修正linq2db.LINQPad連線SQL Server的憑證鏈結錯誤
我們在 LINQPad 連線資料庫時,因為某些原因,我們會採用 linq2db.LINQPad 來進行連線作業。但當你輸入完一般的連線字串,很可能會碰到一個【此憑證鏈結是由不受信任的授權單位發出的】的錯誤。
我們用 Docker Desktop 啟動一個 SQL Server on Linux 為例:
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" -p 1433:1433 --name sql1 --hostname sql1 -d mcr.microsoft.com/mssql/server:2022-latest
由於 linq2db.LINQPad 是採用最原始 Connection String
方式,但 ADS(Azure Data Studio) 或 SSMS(SQL Server Management Studio)都不方便取得連線字串,參考一下 SQL Server connection strings,用以下連線字串測試:
Data Source=localhost;User ID=SA;Password=<YourStrong@Passw0rd>;
發現另外一個好玩的現象。我們開啟 Viusal Studio 的 SQL Server Object Explorer 來測試連線資料庫:
TITLE: Error
------------------------------
Encryption was enabled on this connection, review your SSL and certificate configuration for the target SQL Server, or enable 'Trust server certificate' in the connection dialog"
For help, click: https://aka.ms/ssdt
------------------------------
ADDITIONAL INFORMATION:
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 此憑證鏈結是由不受信任的授權單位發出的。) (Microsoft SQL Server, Error: -2146893019)
For help, click: https://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-2146893019&LinkId=20476
------------------------------
此憑證鏈結是由不受信任的授權單位發出的。
------------------------------
BUTTONS:
OK
------------------------------
訊息差不多,但出現一個重要的關鍵字「Trust server certificate」,修改一下連線選項,把【Trust Server Certificate】由 False
改為 True
,連線就成功了。
修正一下我們的連線字串並拿到 linq2db.LINQPad 測試就能連線成功。
Data Source=localhost;User ID=SA;Password=<YourStrong@Passw0rd>;Trust Server Certificate=True;
一開始我還以為是 linq2db.LINQPad 套件的問題,後來才發現是連線的規則改變了。簡單說就是安全性要求提高了。
後來用 ADS 測試就更明顯了:
ADS 比較貼心,可以直接在提醒畫面改設定之後就能完成連線使用。但也就是 ADS 太貼心,平常都直接按個 Enable Trust server certificate
就直接開始使用,沒特別注意到它影響到什麼設定值。
有興趣的朋友,可以參考黑大的文件,有更深入的討論。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。