萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL Root 密碼初始化與安全加固:從安裝後到生產環境最佳實務

MySQL 安裝後第一件事:為 root 設定強密碼並收斂權限

全新安裝的 MySQL 預設 root 無密碼、允許本地匿名登入、擁有所有權限,極度不安全。本文詳細說明設定 root 密碼的多種方式、重載授權表、移除匿名帳號、禁止遠端 root 登入等安全加固清單。

初始授權表狀態(安裝直後)

  • root@localhost:無密碼、全域權限(含 SHUTDOWN、FILE 等危險權限)。
  • ''@localhost(匿名帳號):可存取 test 庫與 test_% 庫,無管理權限。
  • 允許 localhost 與真實主機名雙重連線。

設定 root 密碼的三種方式

方式一:mysqladmin(最簡單,MySQL 3.22+)

mysqladmin -u root password 'NewStrongP@ssw0rd'

若 root 已有密碼需修改:

mysqladmin -u root -p'OldPass' password 'NewStrongP@ssw0rd'

方式二:直接更新 mysql.user 表(通用所有版本)

mysql -u root mysql
UPDATE user SET authentication_string=PASSWORD('NewStrongP@ssw0rd') WHERE User='root';
FLUSH PRIVILEGES;

注意:MySQL 5.7+ 欄位名為 authentication_string,5.6 及之前為 Password。8.0 預設使用 caching_sha2_password 插件,PASSWORD() 函數已移除,建議用 ALTER USER:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongP@ssw0rd';

方式三:mysql_secure_installation 互動式腳本(推薦新手)

mysql_secure_installation

會依序引導:設定 root 密碼 → 移除匿名帳號 → 禁止 root 遠端登入 → 移除 test 庫 → 重載權限表。

驗證密碼生效

mysqladmin -u root -p status
# 輸入新密碼,顯示 Uptime/Threads/Questions 即成功

若仍可無密碼登入,執行 mysqladmin -u root reload 強制重載授權表(或重啟 mysqld)。

安全加固清單(生產環境必做)

  1. 移除匿名帳號:DROP USER ''@'localhost'; DROP USER ''@'%';
  2. 移除 test 資料庫:DROP DATABASE test; DELETE FROM db WHERE Db='test' OR Db='test\\_%'; FLUSH PRIVILEGES;
  3. 禁止 root 遠端登入:UPDATE user SET Host='localhost' WHERE User='root' AND Host='%'; FLUSH PRIVILEGES;
  4. 建立業務專用帳號,最小權限原則:
    CREATE USER 'app_user'@'app_server_ip' IDENTIFIED BY 'StrongPass';
    GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'app_server_ip';
  5. 啟用 SSL 連線:REQUIRE SSL,防止流量竊聽。
  6. 密碼策略:安裝 validate_password 插件,強制長度、複雜度、過期輪換。
  7. 審計日誌:啟用 audit_log 記錄登入、DDML、錯誤等事件。

密碼遺忘時的緊急重置(附錄)

  1. 停止 mysqld:systemctl stop mysqld
  2. 啟動跳過授權表模式:mysqld --skip-grant-tables --skip-networking &
  3. 無密碼登入:mysql -u root
  4. 更新密碼:FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass';
  5. 正常重啟 mysqld。
copyright © 萬盛學電腦網 all rights reserved