首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 誤刪 root 用戶?跳過權限表快速恢復完整權限

     編輯:MySQL 資料庫相關知識

清理預設帳號時不慎刪除 root,且未授予任何權限,導致無法管理資料庫。此時可利用 MySQL 的 --skip-grant-tables 參數啟動服務,跳過權限驗證,直接操作 mysql.user 表恢復 root 權限。

核心步驟

  1. 停止 MySQL 服務:service mysqld stop
  2. 以跳過權限模式啟動:
    mysqld_safe --skip-grant-tables &
    

    & 表示背景執行,若無背景執行需另開終端機。

  3. 免密碼登入 MySQL:直接輸入 mysql 進入命令列
  4. 重建 root 用戶(若不存在):
    USE mysql;
    INSERT INTO user SET User='root', Host='localhost', ssl_cipher='', x509_issuer='', x509_subject='';
    
  5. 授予完整權限(MySQL 5.5 為例):
    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';
    

    注意:此模式下無法使用 GRANT 指令,只能直接 UPDATE 權限欄位。不同版本欄位名稱可能略有差異,請以 DESC user 確認。

  6. 刷新權限並重新登入:
    FLUSH PRIVILEGES;
    

    退出後以正常模式重啟 MySQL,即可使用 root 完整權限登入。

原理說明

--skip-grant-tables 會讓 MySQL 啟動時不載入權限系統,任何連線均擁有不受限制的存取權。此參數同時會抑制外掛、UDF 與排程事件載入。若 MySQL 編譯時加入 --disable-grant-options,則無法使用此參數。

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