[研究]SQL Server 2019 如何証明存取資料庫是使用加密連線?
2025-03-28
方法 1:查詢 sys.dm_exec_connections 動態管理檢視表
執行以下 SQL 指令來檢查當前連線是否加密:
SELECT c.session_id, s.login_name, c.encrypt_option, c.client_net_address FROM sys.dm_exec_connections AS c JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id; |
********************************************************************************
方法 2:使用 PowerShell 測試加密連線
指令 (不驗證憑證)
|
實際測試
PS C:\> $connectionString = "Server=.;Database=master;Encrypt=True;TrustServerCertificate=True;Integrated Security=True;" PS C:\> $connection = New-Object System.Data.SqlClient.SqlConnection $connectionString PS C:\> $connection.Open() PS C:\> Write-Host "加密連線成功" 加密連線成功 PS C:\> $connection.Close() PS C:\> |
說明:
- Encrypt=True:要求 SQL Server 連線加密。
- TrustServerCertificate=False:需要伺服器提供有效的 SSL 憑證,否則會失敗。
- TrustServerCertificate=True:忽略憑證驗證,一般非公開的SQL Server不會用商用付費憑證、也沒有FQDN網址。(建議)
- 如果連線成功,表示加密功能有效。
********************
指令 (要驗證憑證)
$connectionString = "Server=.;Database=master;Encrypt=True;TrustServerCertificate=False;Integrated Security=True;" $connection = New-Object System.Data.SqlClient.SqlConnection $connectionString $connection.Open() Write-Host "加密連線成功" $connection.Close() |
實際測試
PS C:\> $connectionString = "Server=.;Database=master;Encrypt=True;TrustServerCertificate=False;Integrated Security=True;" PS C:\> $connection = New-Object System.Data.SqlClient.SqlConnection $connectionString PS C:\> $connection.Open() 以 "0" 引數呼叫 "Open" 時發生例外狀況: "與伺服器的連接已成功建立,但在登入程序時發生錯誤。 (provider: SSL Provider, error: 0 - 此憑證 鏈結是由不受信任的授權單位發出的。)" 位於 線路:1 字元:1 + $connection.Open() + ~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SqlException PS C:\> Write-Host "加密連線成功" 加密連線成功 PS C:\> $connection.Close() |
********************************************************************************
補充:檢查與設定 SQL Server 伺服器端設定
如果想確認伺服器是否強制加密連線:
- 開啟 SQL Server Configuration Manager。
- 前往 SQL Server Network Configuration > Protocols for [你的 SQL Server 執行個體]。
- 右鍵點擊 Protocols for [你的 SQL Server 執行個體],選擇 Properties。
- 在 Flags 頁籤中,檢查 Force Encryption 是否設定為 Yes。
- Force Encryption = Yes:伺服器會強制所有連線加密(但客戶端仍需信任伺服器的憑證)。
- Force Encryption = No:伺服器不強制加密,但客戶端仍可選擇使用加密。
********************************************************************************
(完)
沒有留言:
張貼留言