phpMyAdmin 是最流行的 MySQL Web 管理工具,但默認配置存在弱口令、無認證、信息洩露等風險。本文逐項解析 config.inc.php 核心參數,給出生產環境安全加固配置模板。
$cfg['Servers'][$i]['host'] = 'localhost'; // MySQL 地址
$cfg['Servers'][$i]['port'] = '3306'; // 端口
$cfg['Servers'][$i]['user'] = 'pma_user'; // 專用管理賬號(非 root)
$cfg['Servers'][$i]['password'] = 'StrongPass#'; // 強密碼
$cfg['Servers'][$i]['auth_type'] = 'cookie'; // 認證模式:cookie/http/config/signon
$cfg['Servers'][$i]['extension'] = 'mysqli'; // 必須 mysqli
$cfg['Servers'][$i]['compress'] = true; // 壓縮協議
$cfg['Servers'][$i]['ssl'] = true; // 強制 SSL(需 MySQL 配置 SSL)
| 模式 | 機制 | 安全性 | 適用場景 |
|---|---|---|---|
| config | 配置文件寫死 user/pass,免登錄 | ❌ 極低 | 僅本地開發、受信內網 |
| cookie | 表單登錄,密碼 Blowfish 加密存 Cookie | ✅ 高 | 生產環境首選 |
| http | HTTP Basic Auth,瀏覽器原生彈窗 | ⚠️ 中等 | Apache 模塊模式,無法登出 |
| signon | 單點登錄(SSO)集成 | ✅ 高 | 企業統一身份認證體系 |
生產必選 cookie + 強制 HTTPS。
// Blowfish 密鑰(cookie 加密必填,46 字符隨機串)
$cfg['blowfish_secret'] = 'xK9#mP2$vL5!qW8@rT3&yU7*oP0^sD1';
// 登錄 Cookie 有效期(秒),建議 1800(30 分鐘)
$cfg['LoginCookieValidity'] = 1800;
// PHP session.gc_maxlifetime 必須 ≥ LoginCookieValidity
// Cookie 關閉瀏覽器即銷毀
$cfg['LoginCookieStore'] = 0;
// 退出時刪除所有 Cookie
$cfg['LoginCookieDeleteAll'] = true;
// 禁止顯示服務器/數據庫/表詳細版本信息
$cfg['ShowServerInfo'] = false;
$cfg['ShowPhpInfo'] = false;
$cfg['ShowChgPassword'] = false;
$cfg['ShowCreateDb'] = false;
// 限制單次 SQL 執行時間(秒)
$cfg['ExecTimeLimit'] = 300;
// 內存限制
$cfg['MemoryLimit'] = '256M';
// 禁止普通用戶 DROP DATABASE
$cfg['AllowUserDropDatabase'] = false;
// 危險操作二次確認
$cfg['Confirm'] = true;
// 顯示執行的 SQL(調試用,生產建議 false)
$cfg['ShowSQL'] = false;
$i = 0;
// 實例 1:生產主庫
$i++; $cfg['Servers'][$i]['host'] = '10.0.1.10';
$cfg['Servers'][$i]['verbose'] = '生產主庫';
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; // 配置存儲庫,啟用書籤、歷史、關係圖
// 實例 2:只讀從庫
$i++; $cfg['Servers'][$i]['host'] = '10.0.1.11';
$cfg['Servers'][$i]['verbose'] = '只讀從庫';
$cfg['Servers'][$i]['read_only'] = true; // 界面層只讀提示
// 默認登錄實例
$cfg['ServerDefault'] = 1;
| 報錯 | 原因 | 修復 |
|---|---|---|
| 缺少 mysqli 擴展 | PHP 未安裝 php-mysqlnd / extension=mysqli 未開啟 | 安裝擴展、php.ini 開啟、重啟 php-fpm |
| Cannot start session without errors | session.save_path 無寫權限 / 磁盤滿 / session.auto_start 衝突 | 檢查目錄權限、清理臨時文件、關閉 auto_start |
| 不允許空密碼登錄 | MySQL 賬號無密碼 / $cfg['AllowNoPassword']=false | 給賬號設密碼、或臨時開啟 AllowNoPassword(極不推薦) |
配置即防線,一份經過加固的 config.inc.php 能擋住 90% 自動化掃描與弱口令爆破。