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

MySQL 忘記 root 密碼重置全流程:skip-grant-tables 免密登錄修改密碼

     編輯:MySQL 綜合教學

生產環境嚴禁無故重置 root 密碼,但遺忘、接手舊系統、安全審計需輪換時,skip-grant-tables 是標準應急方案。本文給出 Linux 下完整操作步驟、風險控制、恢復驗證。

一、 核心原理

skip-grant-tables 讓 mysqld 啟動時跳過權限表加載,任何用戶無密碼即可登錄、擁有所有權限。極度危險,必須:

  • 防火牆封鎖 3306 對外端口
  • 單機單用戶操作窗口
  • 修改完成立即移除參數並重啟

二、 操作步驟(Linux systemd)

  1. 停止服務:
    
    systemctl stop mysqld
    # 或
    killall -TERM mysqld
    
  2. 編輯配置:
    
    vi /etc/my.cnf
    # [mysqld] 區塊下添加
    skip-grant-tables
    
  3. 啟動服務:
    
    systemctl start mysqld
    
  4. 免密登錄:
    
    mysql -u root -p
    # 直接回車
    
  5. 修改密碼:
    
    -- 5.7.6+ / 8.0
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass#2024';
    -- 5.7.6 前
    UPDATE mysql.user SET authentication_string=PASSWORD('NewStrongPass#2024') WHERE User='root' AND Host='localhost';
    FLUSH PRIVILEGES;
    
  6. 移除參數並重啟:
    
    vi /etc/my.cnf  # 刪除或註釋 skip-grant-tables
    systemctl restart mysqld
    
  7. 驗證新密碼:
    
    mysql -u root -p'NewStrongPass#2024' -e "SELECT USER();"
    

三、 風險控制清單

風險對策
網絡暴露無認證實例防火牆 iptables -I INPUT -p tcp --dport 3306 -j DROP,操作完恢復
現有連接繼續持有舊權限重啟後所有連接斷開,強制重新認證
複製用戶/應用密碼不同步同步修改應用配置、從庫賬號
權限表損壞導致無法啟動備份 mysql 庫、data 目錄再操作

四、 8.0 新特性:密碼歷史與重用限制


ALTER USER 'root'@'localhost' 
  IDENTIFIED BY 'NewPass#2024' 
  PASSWORD EXPIRE INTERVAL 90 DAY 
  FAILED_LOGIN_ATTEMPTS 3 
  PASSWORD_LOCK_TIME 2;

建立密碼輪換策略,從根源減少「忘記密碼」事件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved