核心授權命令
1. 允許任意 IP 訪問(開發/測試環境)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'StrongPassword#123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2. 限定特定 IP/網段(生產環境強制)
-- 單 IP
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100' IDENTIFIED BY 'StrongPassword#123' WITH GRANT OPTION;
-- 網段(需 MySQL 8.0+ 支援 CIDR,5.7 用通配符)
GRANT SELECT, INSERT, UPDATE, DELETE ON `app_db`.* TO 'app_user'@'10.0.1.%' IDENTIFIED BY 'AppPass#456';
-- 特定主機名(需 DNS 解析正確,建議 skip-name-resolve=OFF)
GRANT ALL ON *.* TO 'root'@'app-server-01' IDENTIFIED BY 'StrongPassword#123';
3. 權限分級模板
| 角色 | 權限集合 | 適用場景 |
| 超級管理員 | ALL PRIVILEGES + WITH GRANT OPTION | DBA 專用,極少數人 |
| 應用讀寫 | SELECT, INSERT, UPDATE, DELETE, EXECUTE | 微服務賬號 |
| 應用只讀 | SELECT | 報表、BI、從庫讀取 |
| 開發調試 | SELECT, SHOW VIEW, PROCESS | 開發環境,無寫權限 |
| 備份賬號 | SELECT, LOCK TABLES, REPLICATION CLIENT, SHOW DATABASES | mysqldump/xtrabackup |
| 監控賬號 | PROCESS, REPLICATION CLIENT, SELECT ON performance_schema.* | Prometheus Exporter |
phpMyAdmin 圖形化配置步驟
- 登入 phpMyAdmin → 點擊頂部「用戶帳號」/「權限」。
- 點擊「新增用戶帳號」:
用戶名:app_user
主機名:10.0.1.%(或具體 IP)
密碼:生成強密碼 → 重新輸入確認。
- 「資料庫特定權限」選擇目標庫 → 勾選
SELECT, INSERT, UPDATE, DELETE, INDEX, CREATE, ALTER, DROP 等。
或「全局權限」頁面按角色模板勾選。
- 執行 → 頁面提示「已新增用戶」。
- 關鍵步驟:返回首頁 → 點擊「重新載入權限」(執行
FLUSH PRIVILEGES)。
防火牆端口放行(必須)
# firewalld (CentOS 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
# 阿里云/騰訊雲安全組
# 入站規則:TCP 3306,來源:應用服務器安全組/具體 CIDR,策略:允許
驗證連通性
# 客戶端測試
mysql -h -u app_user -p -P 3306
# 檢查監聽
netstat -antp | grep 3306
# 或
ss -antp | grep 3306
# 抓包確認
tcpdump -i eth0 -nn port 3306
安全加固清單
- ✅ 禁用
root@%,僅允許 root@localhost 或跳板機 IP。
- ✅ 啟用 SSL 傳輸:
REQUIRE SSL 在 GRANT 中指定。
- ✅ 定期輪換密碼,配合
validate_password 強制複雜度。
- ✅ 審計日誌:
MariaDB Audit Plugin 或 MySQL Enterprise Audit 記錄所有登入/操作。
- ✅ 異常登入告警:解析錯誤日誌
Access denied、Failed login 觸發告警。