修正linq2db.LINQPad連線SQL Server的憑證鏈結錯誤

修正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>;
linq to db connection 01
linq to db connection error 01
linq to db connection error 02
linq to db connection error 03

發現另外一個好玩的現象。我們開啟 Viusal Studio 的 SQL Server Object Explorer 來測試連線資料庫:

VisualStudio SQLServerObjectExplorer Connect
VisualStudio SQLServerObjectExplorer Connect Error
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 Server Connect
ADS Server Connect Error

ADS 比較貼心,可以直接在提醒畫面改設定之後就能完成連線使用。但也就是 ADS 太貼心,平常都直接按個 Enable Trust server certificate 就直接開始使用,沒特別注意到它影響到什麼設定值。

有興趣的朋友,可以參考黑大的文件,有更深入的討論。

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。