進階連線選項

本文介紹了 Visual Studio Code PostgreSQL 擴充套件中的進階連線功能。 當你需要重用現有的 連接字串、提供憑證檔案以進行更嚴格的 TLS 驗證,或透過帶有 SSH 隧道的 Bastion 主機連接時,可以使用這些選項。

Tip

關於標準認證、SSL 模式選擇、伺服器群組及已儲存連線,請參見 連線與身份。

使用連線字串輸入模式

在連線對話方塊中,於 連線方式: 下選取 連線字串 索引標籤,以貼上現有的連線定義。 擴充功能會自動解析字串並填充連接欄位。

該頁面採用兩欄版面:

  • 左欄:一個標示 為 Connection String 的文字區,你可以把字串貼上。 文字區下方有提示寫著「請從 連接字串 中省略密碼」。
  • 右欄:唯讀的 連線細節 面板,顯示解析後的 伺服器名稱、 使用者名稱及 資料庫名稱 值。

解析是在你打字或貼上時即時進行的。 若解析器偵測到缺少伺服器或使用者值,文字區上方會出現驗證錯誤。

支援的格式

擴充套件可識別九種 連接字串 格式:

Format 前綴或觸發程序 Example
PostgreSQL URI postgres:// 或 postgresql:// postgresql://user:password@host:5432/dbname?sslmode=require
JDBC jdbc:postgresql:// jdbc:postgresql://host:5432/dbname
以分號分隔(key=value) 包含 ; host=localhost;port=5432;dbname=mydb;user=postgres;password=secret
psql 指令列 psql psql -h host -p 5432 -U user -d dbname
環境變數匯出 export export PGHOST=localhost 接著是 PGPORT, PGUSER, PGDATABASE, PGPASSWORD
Node.js new Client new Client({ host: "localhost", port: 5432, user: "postgres", database: "mydb" })
Python (psycopg2) psycopg2.connect psycopg2.connect(user="postgres", password="<your-password>", host="localhost", port=5432, database="mydb")
PHP pg_connect pg_connect("host=localhost port=5432 dbname=mydb user=postgres")
Ruby PG::Connection.new PG::Connection.new(host: "localhost", port: "5432", user: "postgres", database: "mydb")

解析器會從所有格式中擷取 主機、 使用者、 埠碼、 資料庫和 密碼 。 如果對話框中已有密碼欄位,解析器會保留現有的值。

Note

解析完後,你仍然可以打開進階抽屜來設定連線字串不包含的設定,例如 SSH 隧道或每個連線的 AI 存取模式(Visual Studio Code 的 Copilot 存取模式,游標中的 AI 存取模式)。

配置憑證檔案

當您的環境需要雙向 TLS 或明確的憑證授權單位 (CA) 確認時,請使用進階連線設定抽屜中 SSL 摺疊區段中的憑證檔案設定。

SSL 根憑證模式

SSL 根憑證模式下拉選單控制擴充套件如何提供根憑證憑證。 請選擇下列其中一個值:

Mode 行為
沒有 不使用根憑證。 擴充功能不會驗證伺服器憑證鏈。
System 擴充功能會使用你作業系統的受信任憑證庫。 此模式需要 驗證-完整 SSL 模式;擴充功能會自動強制執行此限制。
自訂檔案 會出現一個標示 為 SSL 根憑證檔案名稱 的文字欄位。 輸入 PEM 編碼的根憑證檔案路徑。

Important

當你選擇 系統時,SSL 模式會自動設定為 Verify-Full 。 若在 系統 啟用時將 SSL 模式更改為其他值,會出現驗證錯誤:「使用系統憑證儲存時需Verify-Full SSL 模式。」

用戶端憑證欄位

在 SSL 區段中於這些欄位提供路徑,以設定雙向 TLS:

欄位標籤 屬性 Description
SSL 憑證檔案名稱 sslcert 客戶端憑證檔案的路徑。
SSL 金鑰檔名 sslkey 客戶端私鑰檔案的路徑。
SSL 根憑證檔案名稱 sslrootcert 根憑證路徑(僅在 SSL 根憑證模式 為 自訂檔案時可見)。
SSL CRL 檔名 sslcrl 憑證撤銷清單檔案的路徑。
使用 SSL 壓縮 sslcompression 啟用 SSL 連線的壓縮功能。

Tip

對於 Verify-CA 和 Verify-Full 模式,務必設定根憑證,讓擴充功能能驗證伺服器憑證。 使用 系統 模式來依賴作業系統可信賴的 CA 儲存,且不指定檔案路徑。

進階 SSL 參數

部分受管理的 PostgreSQL 服務強制執行 TLS,但拒絕該擴充功能的預設協商。 請在進階連線設定抽屜的 SSL 區段設定這些參數以進行連線。 每個參數預設為 Default,該參數保持未設定,並保留先前的行為。

欄位標籤 屬性 價值觀 在下列情況下使用
SSL 憑證模式 sslcertmode 預設、停用、允許、要求 伺服器需要 SSL 但拒絕客戶端憑證。 設為 停用 以停止發送。
通道綁定 channel_binding 預設、停用、偏好、要求 伺服器需要關閉 SCRAM 通道綁定。 設定為 停用。
SSL 協商 sslnegotiation 預設、Postgres、直接 你需要控制 TLS 握手協商的方式。
SSL SNI sslsni 預設、開、關 端點對 TLS 伺服器名稱指示擴充功能敏感。
TLS 協定的最低版本 ssl_min_protocol_version 預設,TLS v1 到 TLS v1.3 您必須釘選一個最低 TLS 版本。
最大 TLS 協定版本 ssl_max_protocol_version 預設,TLS v1 到 TLS v1.3 你必須指定 TLS 的最高版本。

Warning

這些設定是相容性覆寫設定——除非特定伺服器另有要求,否則請將其保持為 Default。 停用通道綁定或 SSL SNI,或允許較舊的 TLS 版本(TLS v1 或 TLS v1.1)相較於預設,會降低連線的安全性。

Note

隨擴充功能附帶的連線後端會顯示這些設定。 如果你在 SSL 區段中看不到它們,請將 PostgreSQL 擴充套件更新至其隨附後端會宣告支援它們的版本。

連線至 AWS Aurora RDS for PostgreSQL

對於需要加密但拒絕用戶端與憑證協商的 Aurora RDS(或 RDS)實例:

  1. 將 SSL 模式設為「必需」。
  2. 將 SSL 憑證模式 設為 停用。

此配置會鏡像 libpq 設定sslmode=require與sslcertmode=disable(及PGSSLMODEPGSSLCERTMODE環境變數)。

連線至適用於 PostgreSQL 的 Azure 資料庫彈性伺服器

如果認證失敗直到通道綁定被停用,請將 通道綁定 設為 停用。

此配置會反映 channel_binding=disable(PGCHANNELBINDING 環境變數)。

Note

將任何參數設為 預設 即可省略。 擴充功能只會傳送你改變的參數,所以現有連線不會受影響。

透過 SSH 隧道連接

SSH 隧道會將 PostgreSQL 連線經由加密的 SSH 通道傳送。 當資料庫無法直接從你的工作站存取時,請使用此方法。 例如,當伺服器位於堡壘主機後方的私有網路中時,

啟用隧道

  1. 打開連線對話框,選擇 進階 以開啟 進階連線設定 抽屜。
  2. 展開 SSH 隧道摺疊區段。
  3. 勾選 啟用 SSH 通道 切換開關。 SSH 連線欄位會出現。

SSH 隧道欄位

欄位標籤 Description
主機 SSH 伺服器的主機名稱或 IP 位址(堡壘主機)。
港口 SSH 伺服器埠號(預設: 22)。
username 使用者名稱用來與 SSH 伺服器驗證。
驗證 SSH 認證方法。 選擇 密碼、 身份檔案或 SSH 代理。

其餘欄位會依所選認證方式而改變:

驗證方法 顯示額外欄位
密碼 密碼/密碼短語:輸入 SSH 密碼。 請勾選儲存密碼/密碼短語 的選項,以持久保存該憑證。
身份檔案 身份檔案:輸入你 SSH 私鑰的完整路徑(例如, ~/.ssh/id_ed25519)。 密碼/密碼短語:若私鑰加密,則輸入密鑰密碼。 儲存密碼/密碼短語 勾選框。
SSH 代理 沒有額外的欄位。 這個擴充功能會將認證授權給你系統的 SSH 代理(ssh-agentmacOS 和 Linux 版本,Windows 版本則是 OpenSSH 認證代理服務)。

隧道運作原理

啟用 SSH 隧道後,擴充功能會先建立 SSH 連線,建立本地埠轉發,然後透過該轉發連接到 PostgreSQL。 因此:

  • 主要連線欄位中的 伺服器名稱 應為 從 SSH 主機看到的資料庫位址,通常為 localhost 或 私有 IP。
  • 埠應該是目標主機上的 PostgreSQL 埠(通常是 5432)。
  • SSH 隧道建立會增加連線延遲。 如果發生逾時,請考慮在進階選項中提高 連接逾時 值。

選擇正確的進階選項

Scenario 推薦功能
你已經有一個 PostgreSQL URI、應用程式片段或 psql 指令 選擇「 連接字串 」標籤,自動填入欄位。
您的組織需要自訂 CA 憑證檔案或雙向 TLS 在進階抽屜的 SSL 區塊中設定 SSL 憑證欄位。
你需要使用作業系統憑證儲存庫來驗證伺服器 將 SSL 根憑證模式 設為 系統 ,SSL 模式 設為 Verify-Full。
受管理伺服器(例如 AWS Aurora RDS)需要 SSL,但會拒絕用戶端憑證 在 SSL 部分將 SSL 模式設為「要求」,SSL 憑證模式「停用」。
適用於 PostgreSQL 的 Azure 資料庫 Flexible Server 拒絕認證直到通道綁定關閉為止 在 SSL 區段將通道綁定設為停用。
資料庫僅能透過跳板盒或堡壘主機存取 在進階抽屜的 SSH 隧道 區段啟用 SSH 隧道。