bind-address = 127.0.0.1)test 可被任意存取
# 以一般使用者身分 (sudo 權限) 操作
mysql -u root
# 在 MySQL 客戶端
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'StrongPass123!';
FLUSH PRIVILEGES;
⚠️ 密碼必須:≥12字元、大小寫數字符號混合、非字典詞。
# 建立資料庫
CREATE DATABASE xoops CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 建立專用管理帳號 (僅本地、僅此資料庫全權限)
GRANT ALL PRIVILEGES ON xoops.* TO 'xoops_admin'@'localhost' IDENTIFIED BY 'XoopsAdminPass456!';
# 後續管理使用 xoops_admin,不再使用 root
# 步驟 A:授權遠端存取
GRANT ALL PRIVILEGES ON xoops.* TO 'xoops_admin'@'%' IDENTIFIED BY 'XoopsAdminPass456!';
# 步驟 B:修改綁定位址
sudo vim /etc/mysql/my.cnf
# 找到 [mysqld] 區段
# bind-address = 127.0.0.1 → 註解或改為 0.0.0.0
# bind-address = 0.0.0.0
# 步驟 C:重啟服務
sudo systemctl restart mysql
# 步驟 D:防火牆放行 (僅允許應用伺服器 IP)
sudo ufw allow from 192.168.1.0/24 to any port 3306
sudo mysql_secure_installation
# 互動式執行:
# - 設定 root 密碼 (已完成可跳過)
# - 移除匿名使用者 → Y
# - 禁止 root 遠端登入 → Y
# - 移除 test 資料庫 → Y
# - 重新載入權限表 → Y
# 本地 root 登入
mysql -u root -p'StrongPass123!'
# 遠端業務帳號登入 (從應用伺服器)
mysql -h db_server_ip -u xoops_admin -p'XoopsAdminPass456!' xoops
# 檢查監聽位址
ss -tlnp | grep 3306
# 0.0.0.0:3306 → 遠端開放
# 127.0.0.1:3306 → 僅本地
| 原則 | 實作 |
|---|---|
| 最小權限 | 業務帳號僅授予特定庫 SELECT/INSERT/UPDATE/DELETE |
| 本地優先 | 管理帳號限制 @localhost,遠端帳號單獨建立 |
| 強密碼 | 所有帳號強制複雜密碼,定期輪換 |
| 網路隔離 | 防火牆/安全組僅開放應用伺服器 IP 存取 3306 |
| 審計日誌 | 啟用一般查詢日誌/慢查詢日誌,定期審計 |