`mysql_secure_installation` 是 MySQL 官方提供的安全強化腳本,執行以下五項關鍵操作:
[root@server ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
Enter current password for root (enter for none):
# 初次安裝 root 無密碼,直接按 Enter
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] Y
New password: 強密碼(≥12位,大小寫數字特殊字元)
Re-enter new password: 再次輸入
Password updated successfully!
Reloading privilege tables.. Success!
By default, a MySQL installation has an anonymous user...
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'...
Disallow root login remotely? [Y/n] Y # 如需遠程管理請選 N 並配置防火牆/VPN
... Success!
By default, MySQL comes with a database named 'test'...
Remove test database and access to it? [Y/n] Y
- Dropping test database... Success!
- Removing privileges on test database... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
-- 1. 設定 root 密碼 (5.7+)
ALTER USER 'root'@'localhost' IDENTIFIED BY '強密碼';
-- 5.6 及以下
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('強密碼');
-- 2. 刪除匿名用戶
DELETE FROM mysql.user WHERE User = '';
-- 3. 禁止 root 遠程登入(保留 localhost/127.0.0.1/::1)
DELETE FROM mysql.user WHERE User = 'root' AND Host NOT IN ('localhost','127.0.0.1','::1');
-- 4. 刪除 test 資料庫及權限
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db = 'test' OR Db = 'test\\_%';
-- 5. 刷新權限
FLUSH PRIVILEGES;
#!/bin/bash
# 適用於 CI/CD 流水線、Ansible、Docker 初始化
ROOT_PWD="$(openssl rand -base64 24)" # 生成隨機強密碼
mysql -u root -p"${OLD_PWD:-}" <
| 加固項目 | 實施方式 | 效益 |
|---|---|---|
| 綁定本地回環介面 | `my.cnf: bind-address = 127.0.0.1` | 阻斷所有外部網路連線 |
| 啟用 SSL/TLS 傳輸加密 | `require_secure_transport=ON` + 配置憑證 | 防止中間人竊聽/篡改 |
| 強制密碼策略 | 安裝 `validate_password` 元件,設長度/複雜度/過期 | 杜絕弱密碼 |
| 最小權限原則 | 業務帳號僅授予特定庫/表 SELECT/INSERT/UPDATE | 縮小洩露影響面 |
| 審計日誌 | 啟用 `audit_log` 插件記錄所有查詢/登入/失敗 | 合規與事後追溯 |
| 定期輪換密碼 | 腳本配合 `ALTER USER ... PASSWORD EXPIRE` | 降低長期洩露風險 |
| 關閉不需的功能 | `skip-show-database`、`local_infile=OFF`、`symbolic-links=0` | 減少攻擊面 |
`mysql_secure_installation` 是 MySQL 上線前的**必執行基準動作**,耗時不足 1 分鐘卻能消除 80%+ 的預設配置風險。生產環境請結合「非互動式自動化」納入標準化部署流程,並疊加上述「額外加固」構建纵深防禦體系。