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

MySQL 誤刪 root 用戶緊急恢復實戰指南

     編輯:MySQL 綜合教學

MySQL 誤刪 root 用戶緊急恢復實戰指南

清理預設帳號時不慎刪除 root 用戶,且未授予任何權限,導致無法正常登入管理。利用 MySQL --skip-grant-tables 模式繞過權限系統,即可重建 root 帳號並恢復完整權限。

核心原理

--skip-grant-tables 讓 mysqld 啟動時不載入權限表,任何連線均擁有最高權限,但也意味著極高安全風險,操作期間請確保:

  • 在實體主機 Console 操作,或拔除網路線。
  • 防火牆封鎖 3306 埠對外連線。
  • 操作完成後立即恢復正常模式並重啟服務。

恢復步驟 (MySQL 5.5 為例)

  1. 停止 MySQL 服務
    service mysqld stop
  2. 以 skip-grant-tables 啟動
    mysqld_safe --skip-grant-tables &

    背景執行,終端機保持開啟。

  3. 免密登入並切換 mysql 資料庫
    mysql -u root
    USE mysql;
  4. 重建 root 用戶 (若不存在)
    INSERT INTO user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject)
    VALUES ('localhost', 'root', '', '', '', '');

    注意:MySQL 5.7+ 密碼欄位為 authentication_string,語法需調整。

  5. 授予完整權限 (使用 UPDATE,因 GRANT 在此模式失效)
    UPDATE user SET
      Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y',
      Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y',
      Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y',
      Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y',
      Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y',
      Repl_slave_priv='Y', Repl_client_priv='Y', Create_view_priv='Y',
      Show_view_priv='Y', Create_routine_priv='Y', Alter_routine_priv='Y',
      Create_user_priv='Y', Event_priv='Y', Trigger_priv='Y',
      Create_tablespace_priv='Y', authentication_string=''
    WHERE User='root' AND Host='localhost';
  6. 刷新權限並退出
    FLUSH PRIVILEGES;
    QUIT;
  7. 恢復正常模式並重啟
    # 終止背景 mysqld_safe (Ctrl+C 或 kill)
    service mysqld restart
  8. 驗證恢復
    mysql -u root -p
    # 輸入空密碼或新設密碼登入成功

版本差異提醒

版本密碼欄位建議語法
5.5 / 5.6PasswordUPDATE ... SET Password=PASSWORD('newpwd')
5.7 / 8.0authentication_stringALTER USER 'root'@'localhost' IDENTIFIED BY 'newpwd'; (需正常模式)

5.7+ 版本在 --skip-grant-tables 下無法使用 ALTER USER,需先 UPDATE authentication_string='',重啟後再用 ALTER USER 設定強密碼。

安全收尾

恢復登入後,立即執行:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd!';
FLUSH PRIVILEGES;

並檢查 user 表是否有匿名帳號、無密碼帳號、% 主機帳號,一併清理。

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