首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Navicat 通過 HTTP 隧道連接禁止遠程訪問的 MySQL 數據庫

     編輯:MySQL 資料庫相關知識

許多虛擬主管/雲服務器出於安全考慮,禁止 MySQL 3306 端口遠程訪問,僅允許本地連接。本文詳解如何使用 Navicat 的 HTTP 隧道功能,通過部署在服務器上的 PHP 腳本代理連接數據庫。

前置條件

  • 服務器已安裝 PHP、MySQL,Web 服務正常運行
  • 本地已安裝 Navicat(官網下載最新版)
  • 知道數據庫用戶名/密碼(通常為 root 或應用專用賬號)

步驟詳解

1. 創建新連接

打開 Navicat → 左上角「連接」→ 選擇 MySQL → 彈出「新建連接」對話框。

2. 基本設置(關鍵:主機填 localhost)

字段填寫值說明
連接名自定義,如「生產環境-HTTP隧道」便於識別
主機名/IPlocalhost**必須填 localhost**,因為 PHP 腳本在服務器本地連接 MySQL
端口3306默認
用戶名你的數據庫用戶名如 root、app_user
密碼你的數據庫密碼

3. 配置 HTTP 隧道

  1. 切換到「HTTP」標籤頁
  2. 勾選「使用 HTTP 隧道」
  3. 隧道地址填寫:https://your-domain.com/ntunnel_mysql.php
    • 前綴:你的網站域名或服務器公網 IP
    • 後綴:固定為 ntunnel_mysql.php(Navicat 自動生成的代理腳本名)

4. 獲取並部署代理腳本

  1. 點擊「確定」保存連接,Navicat 會在安裝目錄下自動生成 ntunnel_mysql.php
  2. 用 FTP/SFTP 工具(如 FileZilla)將該文件上傳到網站根目錄(或配置的隧道地址對應路徑)
  3. 重要:文件名必須保持 ntunnel_mysql.php,或修改連接配置中的隧道地址對應新文件名

5. 測試連接

點擊「測試連接」,稍等片刻(首次需經過 HTTP 請求轉發),顯示「連接成功」即可。

原理圖解

Navicat (本地) 
   │ HTTPS/HTTP 請求
   ▼
Web Server (nginx/Apache + PHP)
   │ 執行 ntunnel_mysql.php
   │ 解析請求 → 建立本地 MySQL 連接 → 轉發協議
   ▼
MySQL (localhost:3306) ←── 內網通信,無需開放 3306

常見問題排查

現象原因解決
連接超時PHP max_execution_time 過短修改 php.ini: max_execution_time = 300
提示「Access denied」數據庫用戶無本地登錄權限GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'pwd'
文件 404腳本未上傳或路徑錯誤確認文件在 Web 根目錄,URL 可直接訪問
亂碼字符集不一致腳本中設置 mysqli_set_charset($link, 'utf8mb4')

安全加固建議

  • 重命名 ntunnel_mysql.php 為難以猜測的名稱(如 db_tunnel_x7k9.php),同步修改 Navicat 配置
  • 在腳本開頭添加 IP 白名單或 Token 驗證
  • 服務器防火牆僅開放 80/443,確保 3306 僅本地可訪問
  • 定期輪換數據庫密碼

HTTP 隧道雖引入少量延遲(通常 <200ms),但極大提升了安全性,是受限環境下管理遠程 MySQL 的標準解法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved