MySQL 預設安裝往往存在安全隱患:密碼雖加密傳輸,但其他數據採用明文;匿名用戶、過度權限、不當的 root 使用等均可能導致資料洩露或服務被劫持。本文整理 7 項關鍵加固措施,助你構建強健的資料庫防線。
空密碼是最大隱患。確保每個帳號(含 root)均設有複雜密碼。MySQL 5.7+ 預設已強制要求,舊版本需手動檢查:
SELECT User, Host FROM mysql.user WHERE authentication_string = '' OR authentication_string IS NULL;
安裝腳本 mysql_secure_installation 可一鍵完成:刪除匿名帳號、禁止 root 遠程登入、移除 test 庫、重載權限表。
嚴禁使用 root 系統用戶啟動 mysqld。 建立專用 mysql 用戶/組,僅授予數據目錄讀寫權限:
groupadd mysql && useradd -r -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /var/lib/mysql
bind-address = 10.0.0.5skip-networking 僅允許 Unix Socket 連接ssl-ca、ssl-cert、ssl-key,強制加密連接(REQUIRE SSL)--compress 減少明文傳輸量(MySQL 3.22+ 支持)| 危險權限 | 風險 | 建議 |
|---|---|---|
| FILE | 讀寫服務器文件(如 /etc/passwd) | 僅 DBA 持有,應用帳號嚴禁 |
| PROCESS | 查看所有執行中 SQL(含敏感密碼) | 僅監控帳號持有 |
| SUPER | 殺死連接、修改全局變量、讀取日誌 | 極少數管理帳號持有 |
| SHUTDOWN | 關閉資料庫服務 | 僅自動化運維帳號持有 |
應用帳號僅授予特定庫的 SELECT, INSERT, UPDATE, DELETE, EXECUTE。
general_log 記錄所有連接與查詢(高負載下慎用)audit_plugin(如 MariaDB Audit Plugin、Percona Audit Plugin)記錄 DDL/DML 操作mysql.user、db、tables_priv 權限表資料庫安全非一次性配置,而是持續過程:「最小權限、加密傳輸、專用用戶、審計日誌」四大支柱缺一不可。定期掃描弱密碼、異常權限、暴露端口,才能在攻擊面前保持主動。