MySQL 安全加固終極指南:5 步鎖死數據庫防黑客

# MySQL 安全加固終極指南:5 步鎖死數據庫防黑客 做 IT 嘅你一定聽過:「數據庫俾人爆咗,成間公司收皮。」MySQL 作為全球最流行嘅開源數據庫,每日俾黑客掃 port 嘅次數多到你唔信。但好多中小企裝完 MySQL 就咁用 default config,等於大門打開歡迎參觀。 今日就同大家 step-by-step 搞掂 MySQL 安全加固,5 步鎖死你個數據庫,等黑客見到都頭痛。 ...

MySQL 安全加固終極指南:5 步鎖死數據庫防黑客 - 文章重點速覽 infographic

# MySQL 安全加固終極指南:5 步鎖死數據庫防黑客

做 IT 嘅你一定聽過:「數據庫俾人爆咗,成間公司收皮。」MySQL 作為全球最流行嘅開源數據庫,每日俾黑客掃 port 嘅次數多到你唔信。但好多中小企裝完 MySQL 就咁用 default config,等於大門打開歡迎參觀。

今日就同大家 step-by-step 搞掂 MySQL 安全加固,5 步鎖死你個數據庫,等黑客見到都頭痛。

## MySQL 安全第一步:剷走預設帳户同測試資料庫

裝完 MySQL 第一件事,唔係 create database,而係清垃圾。MySQL 預設有 anonymous user 同 test database,呢兩樣嘢係黑客最鍾意嘅切入點。

-- 登入 MySQL root
mysql -u root -p

-- 剷走 anonymous users
DELETE FROM mysql.user WHERE User='';

-- 剷走 test database
DROP DATABASE IF EXISTS test;

-- 清除 test 相關權限
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';

-- 重新載入權限表
FLUSH PRIVILEGES;

行完之後用 `SELECT User, Host FROM mysql.user;` 確認,應該只見到 root 同你建立嘅管理帳户。呢步係 MySQL 安全嘅基本,但超過 60% 嘅 MySQL instance 都冇做。

## MySQL 安全第二步:強制密碼策略同帳户鎖定

MySQL 8.0 內置咗密碼驗證插件 `validate_password`,你一定要開。唔好靠用户自律,要靠系統強制。

-- 安裝密碼驗證插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

-- 設定密碼策略(最少 12 位、要有大細階+數字+特殊字符)
SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.mixed_case_count = 1;
SET GLOBAL validate_password.number_count = 1;
SET GLOBAL validate_password.special_char_count = 1;
SET GLOBAL validate_password.policy = 'STRONG';

-- 啟用帳户鎖定(5 次失敗鎖 2 日)
CREATE USER 'app_user'@'%' 
  IDENTIFIED BY 'SuperStrongP@ssw0rd2026' 
  FAILED_LOGIN_ATTEMPTS 5 
  PASSWORD_LOCK_TIME 2;

呢個設定令暴力破解基本上冇可能成功。5 次錯就鎖 48 小時,黑客等到花兒也謝了。

## MySQL 安全第三步:網絡層防護 — 限制 IP 同強制 SSL/TLS

MySQL 預設 listen 0.0.0.0:3306,等於全宇宙都連到。你必須限制 bind address 同啟用 SSL。

# 編輯 MySQL config(Ubuntu/Debian)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 加入以下設定
[mysqld]
bind-address = 127.0.0.1    # 只聽 localhost(如需要 remote 就改內網 IP)
require_secure_transport = ON
ssl-ca = /etc/mysql/certs/ca.pem
ssl-cert = /etc/mysql/certs/server-cert.pem
ssl-key = /etc/mysql/certs/server-key.pem

-- 建立 SSL 用户(強制加密連線)
CREATE USER 'secure_user'@'192.168.1.%' 
  IDENTIFIED BY 'SecureP@ss2026' 
  REQUIRE SSL;

-- 檢查現有用户 SSL 狀態
SELECT User, Host, ssl_type FROM mysql.user;

所有 remote connection 必須行 SSL,中間人攻擊即刻失效。MySQL 安全嘅網絡層就係咁簡單。

## MySQL 安全第四步:最小權限原則 — 只俾必要權限

「是但 grant ALL PRIVILEGES」係最常見嘅 MySQL 安全災難。每個 application user 只需要最基本嘅權限。

-- ❌ 千祈唔好咁做
GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%';

-- ✅ 正確做法:只俾必要權限
GRANT SELECT, INSERT, UPDATE, DELETE 
  ON myapp_db.* 
  TO 'app_user'@'192.168.1.%';

-- 連 DROP/ALTER 都唔俾(除非真係需要)
-- Application user 唔應該有 DDL 權限

-- 檢查用户權限
SHOW GRANTS FOR 'app_user'@'192.168.1.%';

記住:每個 user account 只應該有佢工作需要嘅最低權限。Web app user 唔需要 DROP TABLE,backup user 只需要 SELECT 同 LOCK TABLES。呢個 principle 係 MySQL 安全嘅黃金法則。

## MySQL 安全第五步:審計日誌同持續監控

做完以上四步,MySQL 安全已經好穩固。但安全係持續嘅過程,你需要知道邊個做過咩。

-- 啟用 general query log(debug 用,唔好長期開)
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/query.log';

-- 啟用 error log(必須長期開)
-- 喺 my.cnf 設定:
-- [mysqld]
-- log_error = /var/log/mysql/error.log

-- 啟用 slow query log(性能+安全雙重用途)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';

# 用 MySQL Enterprise Audit Plugin(MySQL Enterprise Edition)
# 或者用 Percona Audit Plugin(免費替代)
# 安裝 Percona Audit Plugin
sudo apt install percona-server-server  # 已內置 audit plugin

# 啟用 audit log
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
SET GLOBAL audit_log_format = 'JSON';
SET GLOBAL audit_log_policy = 'ALL';  # 記錄所有連線同查詢

## MySQL 安全 Bonus:定期備份 + 加密

安全唔止係防入侵,仲要防數據損失。定期 backup 係 MySQL 安全嘅最後一道防線。

# 加密備份(用 mysqldump + openssl)
mysqldump -u root -p --all-databases --single-transaction \
  | openssl enc -aes-256-cbc -salt -pass pass:YourBackupPassword \
  > /backup/mysql_$(date +%Y%m%d).sql.enc

# 解密還原
openssl enc -aes-256-cbc -d -pass pass:YourBackupPassword \
  -in /backup/mysql_20260612.sql.enc \
  | mysql -u root -p

## 總結

MySQL 安全唔係火箭科技,5 步就搞掂:
1. 清走預設帳户同 test DB
2. 強制密碼策略 + 帳户鎖定
3. 限制 IP + 強制 SSL
4. 最小權限原則
5. 審計日誌 + 持續監控

🔗 參考資料:NVD NIST 漏洞資料庫

呢 5 步做齊,你個 MySQL 已經比 90% 嘅 production instance 更安全。記住:MySQL 安全係持續過程,唔係一次性 project。定期 review 權限、檢查 log、更新 patch,先係真正嘅安全。

#MySQL安全 #數據庫安全 #MySQL #DatabaseSecurity #Linux安全