MySQL 安全需從系統層、數據層、網絡層、應用層多維加固。本文(上)聚焦系統內部安全:目錄權限、啟動用戶、日志敏感信息防洩漏。
數據目錄(/usr/local/mysql/var)權限演進:
| 版本 | 權限 | 風險 |
|---|---|---|
| 3.21.x | 775 | 任意本地用戶可讀 |
| 3.22.x | 770 | 同組用戶可讀寫 |
| 3.23.x+ | 700 | 僅啟動用戶可訪問 ✓ |
drwx------ 4 mysql mysql 4096 var/
drwx------ 2 mysql mysql 4096 var/mysql/
-rw------- 1 mysql mysql 8778 var/mysql/columns_priv.frm
...
修正命令:
chown -R mysql.mysql /usr/local/mysql/var
chmod -R go-rwx /usr/local/mysql/var
mysql 用戶啟動LOAD DATA INFILE/SELECT ... INTO OUTFILE 擁有 Root 寫權限--user=root 參數(極不推薦)命令行帶密碼會寫入 ~/.bash_history,SQL 語句寫入 ~/.mysql_history。
錯誤示範:
mysqldump -uroot -ptest db > backup.sql
mysql -uroot -ptest
正確做法:
mysqldump -uroot -p db > backup.sql # 交互輸入密碼
mysql -uroot -p
徹底禁用歷史記錄:
rm ~/.bash_history ~/.mysql_history
ln -s /dev/null ~/.bash_history
ln -s /dev/null ~/.mysql_history
外部網絡安全:防火牆、SSL 加密、綁定地址、跳板機、審計插件;編程層面:預處理語句、注入防護、錯誤信息脫敏。