本文介紹了 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)實例:
- 將 SSL 模式設為「必需」。
- 將 SSL 憑證模式 設為 停用。
此配置會鏡像 libpq 設定sslmode=require與sslcertmode=disable(及PGSSLMODEPGSSLCERTMODE環境變數)。
連線至適用於 PostgreSQL 的 Azure 資料庫彈性伺服器
如果認證失敗直到通道綁定被停用,請將 通道綁定 設為 停用。
此配置會反映 channel_binding=disable(PGCHANNELBINDING 環境變數)。
Note
將任何參數設為 預設 即可省略。 擴充功能只會傳送你改變的參數,所以現有連線不會受影響。
透過 SSH 隧道連接
SSH 隧道會將 PostgreSQL 連線經由加密的 SSH 通道傳送。 當資料庫無法直接從你的工作站存取時,請使用此方法。 例如,當伺服器位於堡壘主機後方的私有網路中時,
啟用隧道
- 打開連線對話框,選擇 進階 以開啟 進階連線設定 抽屜。
- 展開 SSH 隧道摺疊區段。
- 勾選 啟用 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 隧道。 |