全新安裝的 MySQL 默認存在重大安全風險:
test 庫及 test_% 庫。test 數據庫對所有用戶可讀寫。mysql_secure_installation
交互式向導將引導完成:
test 數據庫及其權限-- 連接數據庫
mysql -u root -p
-- ① 修改 root 密碼(MySQL 5.7.6+ / 8.0)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或舊版本
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewStrongPass123!');
-- ② 刪除匿名用戶
DELETE FROM mysql.user WHERE User = '';
-- ③ 僅允許本地 root 登入
DELETE FROM mysql.user WHERE User = 'root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-- ④ 刪除測試庫
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db = 'test' OR Db LIKE 'test\\_%';
-- ⑤ 刷新權限
FLUSH PRIVILEGES;
| 維度 | 措施 | 說明 |
|---|---|---|
| 網絡 | bind-address = 127.0.0.1 |
僅監聽本地回環,阻斷外部直連 |
| 網絡 | 防火牆僅放行應用服務器 IP | 如 ufw allow from 10.0.0.5 to any port 3306 |
| 權限 | 業務賬號最小權限 | GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'app_user'@'10.0.0.%' IDENTIFIED BY '...'; |
| 審計 | 啟用审计日志插件 | 記錄登入、DDL/DML 操作,滿足合規 |
| 加密 | 傳輸層 TLS / 靜態數據加密 | require_secure_transport=ON,配合 innodb_encrypt_tables |
| 密碼策略 | validate_password 組件 | 強制長度、複雜度、過期輪換 |
my.ini 中設置 skip-networking 或 bind-address=127.0.0.1。-- 檢查用戶與宿主
SELECT User, Host, plugin, authentication_string FROM mysql.user;
-- 嘗試匿名登入(應失敗)
mysql -u '' -p -h localhost
-- 嘗試遠程 root 登入(應失敗)
mysql -u root -p -h 192.168.1.100
-- 確認 test 庫不存在
SHOW DATABASES LIKE 'test%';
「安裝完成 ≠ 可上線」。花 10 分鐘執行 mysql_secure_installation 並落實最小權限、網絡隔離、加密傳輸,能攔截 90% 以上的入侵嘗試。安全是持續過程,請將審計日誌、密碼輪換、版本升級納入常規運維體系。