資料庫安全的核心在於「最小權限原則」與「纵深防禦」。以下措施涵蓋網路傳輸、帳號管理、伺服器配置、權限控制四大面向,助您建立強健的 MySQL 防線。
require_secure_transport=ON 強制所有連線加密。ssh -L 3306:localhost:3306 user@server)連線,等同於在不可信網路上建立加密通道。mysql_native_password 或 caching_sha2_password 認證插件。UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES; 僅允許本地連線。DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'; FLUSH PRIVILEGES;mysql 系統帳號,在 my.cnf [mysqld] 區段設定 user=mysql。嚴禁以 root 身分啟動資料庫進程。[mysqld] skip-symbolic-links=1 防止任意檔案讀寫風險。datadir)僅授予 mysql 使用者讀寫權限(chmod 750,chown mysql:mysql)。local_infile=0(防止 LOAD DATA LOCAL 任意讀取客戶端檔案)、skip-show-database(隱藏資料庫列表)。audit_log 插件,記錄所有查詢、連線、錯誤嘗試,便於事後追蹤。GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'10.0.0.%'; 避免 GRANT ALL 或 WITH GRANT OPTION。PROCESS、SUPER、FILE、SHUTDOWN、RELOAD 僅授予 DBA 專用帳號。SUPER 權限可終止任意連線、修改全域變數、控制複寫,極度敏感。SUPER 連線槽,確保管理員在連線耗盡時仍能登入排查。mysql_secure_installation、Lynis、OpenVAS 定期掃描弱點。| 檢查項目 | 合規標準 |
|---|---|
| root 遠端登入 | 已禁用 |
| 匿名帳號 | 已移除 |
| 測試資料庫 | 已刪除 |
| SSL/TLS 強制 | 啟用 |
| mysqld 執行身分 | 非 root 專用帳號 |
| 符號連結 | 已禁用 |
| 應用程式帳號權限 | 最小必要權限 |
| 審計日誌 | 已啟用 |
| 備份加密/異地 | 已落實 |
資料庫安全非一次性設定,而是持續的流程。建議將上述措施納入基礎設施即代碼 (IaC) 與 CI/CD 流程,確保每次部署皆符合安全基準線。