MySQL 開箱即用但預設不安全。本文匯總 12 項可立即執行的安全加固與優化措施,涵蓋密碼、用戶、網絡、文件、日誌、備份、配置模板選擇、自動修復腳本,適合快速落地生產環境基線。
mysqladmin -u root password 'strong_pwd'
-- 或
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('strong_pwd');
-- 或
UPDATE mysql.user SET authentication_string=PASSWORD('strong_pwd') WHERE User='root'; FLUSH PRIVILEGES;
DROP DATABASE test;
DELETE FROM mysql.db;
DELETE FROM mysql.user WHERE NOT (User='root' AND Host='localhost');
FLUSH PRIVILEGES;
UPDATE mysql.user SET User='admin' WHERE User='root'; FLUSH PRIVILEGES;
[mysqld]
local-infile=0
[mysqld]
skip-networking
# 或啟動參數 --skip-networking
GRANT SELECT,INSERT,UPDATE,DELETE ON biz_db.* TO 'app'@'10.0.1.%' IDENTIFIED BY 'pwd';
[mysqld]
skip-show-database
chown -R mysql:mysql /var/lib/mysql
chmod -R go-rwx /var/lib/mysql
rm -f ~/.bash_history ~/.mysql_history
ln -s /dev/null ~/.bash_history
ln -s /dev/null ~/.mysql_history
| 模板 | 記憶體 |
|---|---|
| my-small.cnf | < 64MB |
| my-medium.cnf | 32~64MB |
| my-large.cnf | 512MB |
| my-huge.cnf | 1~2GB |
| my-innodb-heavy-4G.cnf | 4GB+ |
cp /usr/share/mysql/my-large.cnf /etc/my.cnf # RPM
cp support-files/my-large.cnf /etc/my.cnf # 源碼
mysqlcheck -A -o -r -p
# 指定庫
mysqlcheck -o -r db_name -p
#!/bin/bash
# verify_mysql_hardening.sh
echo "=== 安全基線檢查 ==="
mysql -e "SELECT User, Host, plugin FROM mysql.user;"
mysql -e "SHOW VARIABLES LIKE 'local_infile';"
mysql -e "SHOW VARIABLES LIKE 'skip_networking';"
mysql -e "SHOW VARIABLES LIKE 'skip_show_database';"
ls -ld /var/lib/mysql
echo "=== 完成 ==="