資料庫安全非一日之功,而是纏繞在架構設計、開發規範、維運流程每個環節。本文整理 23 條實戰經驗,涵蓋網路傳輸、認證授權、注入防範、稽核監控四大面向,助你建立纵深防禦體系。
mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.*,按庫、表、欄位最小權限授予。MD5()、SHA1() 或更強的 SHA2()、bcrypt 雜湊值。nmap -p 3306 或 telnet host 3306 定期掃描驗證。PDO::prepare()、Java 使用 PreparedStatement。SELECT/INSERT/UPDATE/DELETE 於特定庫,拒絕 DROP/ALTER/GRANT。mysqli_real_escape_string()、Python cursor.execute() 參數化等。tcpdump -l -i eth0 -w - src or dst port 3306 | strings 偵測明文敏感資料外洩。--skip-symbolic-links 防止任意檔案讀取。LOAD DATA INFILE '/etc/passwd' 讀取系統檔案。GRANT ... TO 'user'@'192.168.1.%'。max_user_connections 防止單一應用耗盡連線池。MAX_QUERIES_PER_HOUR、MAX_UPDATES_PER_HOUR、MAX_CONNECTIONS_PER_HOUR、MAX_USER_CONNECTIONS。--local-infile=0 禁用 LOAD DATA LOCAL--skip-grant-tables 僅限緊急救援,啟用後必須 FLUSH PRIVILEGES 重新載入權限--skip-show-databases 隱藏資料庫列表資訊killall mysqldmysqld_safe --skip-grant-tables &mysql -u rootUPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='root'; FLUSH PRIVILEGES;安全是系統工程,而非單一設定。將這 23 條鐵律納入開發規範、Code Review 清單、上線核對表、定期滲透測試,才能構建真正可信賴的 MySQL 環境。