2025年3月28日 星期五

[研究]SQL Server 2019 如何証明存取資料庫是使用加密連線?

[研究]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 測試加密連線

指令 (不驗證憑證)

$connectionString = "Server=.;Database=master;Encrypt=True;TrustServerCertificate=True;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=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 伺服器端設定

如果想確認伺服器是否強制加密連線:

  1. 開啟 SQL Server Configuration Manager。
  2. 前往 SQL Server Network Configuration > Protocols for [你的 SQL Server 執行個體]。
  3. 右鍵點擊 Protocols for [你的 SQL Server 執行個體],選擇 Properties。
  4. 在 Flags 頁籤中,檢查 Force Encryption 是否設定為 Yes。

    • Force Encryption = Yes:伺服器會強制所有連線加密(但客戶端仍需信任伺服器的憑證)。
    • Force Encryption = No:伺服器不強制加密,但客戶端仍可選擇使用加密。




********************************************************************************

(完)

沒有留言:

張貼留言