首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL root 用戶安全初始化指南:密碼設置、授權表原理、mysqladmin 修改密碼、跳過授權表緊急重置

     編輯:MySQL 綜合教學

初始安裝安全狀態

  • **root@localhost 無密碼** 可登錄,擁有所有權限 (含 `SHUTDOWN`, `FILE`, `GRANT OPTION`)。
  • **匿名用戶** (`''@localhost`) 可訪問 `test`、`test_%` 庫,無管理權限。
  • **極度不安全**,生產部署前**必須**完成初始化安全配置。

標準密碼設置方法

方法 1:mysqladmin (推薦,5.7+ 兼容)


mysqladmin -u root password 'StrongP@ssw0rd'
# 或指定舊密碼 (修改密碼時)
mysqladmin -u root -p'oldpass' password 'newpass'

方法 2:直接更新 mysql.user 表 (通用、舊版兼容)


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

**注意:** 5.7+ `password` 列改名為 `authentication_string`,`PASSWORD()` 函數 8.0 棄用 (改用 `SHA2`)。

方法 3:ALTER USER (5.7.6+ / 8.0 推薦)


ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd';
-- 8.0 默認 caching_sha2_password 插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongP@ssw0rd'; -- 兼容舊驅動

授權表生效機制

  • 服務啟動時將授權表載入內存 (`mysql.user`, `db`, `tables_priv` 等)。
  • 運行時修改授權表 (UPDATE/INSERT/DELETE) **不會自動生效**。
  • 必須執行 `FLUSH PRIVILEGES` 或 `mysqladmin reload` 重載內存權限緩存。
  • `SET PASSWORD` / `ALTER USER` / `GRANT` / `REVOKE` **自動隱式重載**,無需手動 FLUSH。

驗證密碼生效


mysqladmin -u root -p'StrongP@ssw0rd' status
# 成功返回 Uptime/Threads/Questions 等狀態
# 失敗報錯 Access denied

緊急重置 root 密碼 (忘記密碼/授權表損壞)

  1. 停止服務:`net stop mysql` / `systemctl stop mysqld`
  2. 跳過授權表啟動:
    
    mysqld --skip-grant-tables --skip-networking &
    # --skip-networking 防止遠程連接利用無密碼漏洞
    
  3. 無密碼登錄:`mysql -u root`
  4. 修改密碼:
    
    FLUSH PRIVILEGES;  -- 必須先執行,否則 UPDATE 無效
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass';
    -- 或舊版
    UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='root';
    FLUSH PRIVILEGES;
    
  5. 正常重啟:`mysqladmin shutdown` → `systemctl start mysqld`

最佳實踐清單

  1. 安裝後**立即**運行 `mysql_secure_installation` (交互式安全向導)。
  2. root 僅允許 `localhost` / `127.0.0.1` / `::1` 登錄,**刪除 `'root'@'%'`**。
  3. 應用使用**專用賬號、最小權限、強密碼**。
  4. 定期輪換密碼,審計 `mysql.user` 異常賬號。
  5. 啟用 `validate_password` 組件強制密碼複雜度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved