萬盛學電腦網

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

MySQL/MariaDB 忘記 Root 密碼重置實戰:Linux 環境 skip-grant-tables 方案

適用場景與前提

  • Linux 系統(CentOS/Ubuntu/Debian 等)
  • 擁有服務器 root/sudo 權限
  • MySQL 或 MariaDB 數據庫
  • **僅限緊急密碼重置,操作完成後必須恢復安全配置**

核心原理

啟動參數 --skip-grant-tables 使 MySQL **跳過權限表驗證**,允許無密碼、無權限檢查直接登錄,從而修改 mysql.user 表重置密碼。

操作步驟

1. 修改配置文件啟用跳過授權

vim /etc/my.cnf
# 在 [mysqld] 區塊添加
skip-grant-tables
# 保存退出

2. 重啟 MySQL 服務

systemctl restart mysqld
# 或 service mysql restart

3. 無密碼登錄並修改密碼

mysql -u root
# 進入 mysql> 提示符

USE mysql;

-- MySQL 5.7.6+ / MariaDB 10.2+ (authentication_string 列)
UPDATE user SET authentication_string = PASSWORD('NewStrongPass#2024') 
WHERE User = 'root' AND Host = 'localhost';

-- MySQL 5.7.6 前 / 老版本 (password 列)
-- UPDATE user SET password = PASSWORD('NewStrongPass#2024') WHERE User = 'root';

FLUSH PRIVILEGES;
MySQL 8.0 注意:默認使用 caching_sha2_password 插件,PASSWORD() 函數已移除。8.0 重置密碼應用:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass#2024';

4. 關鍵:恢復安全配置並重啟

# 1. 註釋或刪除 skip-grant-tables
vim /etc/my.cnf
# skip-grant-tables  <-- 加 # 註釋

# 2. 重啟服務恢復正常權限驗證
systemctl restart mysqld

5. 驗證新密碼

mysql -u root -p'NewStrongPass#2024' -e "SELECT VERSION();"

安全警示與最佳實踐

⚠ 極度危險狀態:啟用 skip-grant-tables 期間,**任何本地用戶均可無密碼以 root 身份登錄、任意增刪改查、甚至 DROP DATABASE**。

風險控制措施

  1. 最小化窗口期:單人操作、全程盯控、秒級完成
  2. 網絡隔離:臨時修改 bind-address=127.0.0.1 僅允許本地連接
  3. 防火牆封鎖:iptables -I INPUT -p tcp --dport 3306 -j DROP 禁止外部訪問
  4. 操作審計:腳本記錄操作時間、操作人、執行命令

替代方案:官方 mysql_secure_installation(若知舊密碼)

/usr/local/mysql/bin/mysql_secure_installation

交互式完成:修改 root 密碼、移除匿名用戶、禁止 root 遠程、刪除 test 庫、刷新權限。

Windows 環境差異提示

  • 配置文件:my.ini(通常在安裝目錄或 C:\ProgramData\MySQL\MySQL Server 5.x\)
  • 服務管理:net stop mysql && net start mysql
  • 命令行:mysqld --console --skip-grant-tables 前台運行調試模式

總結

Linux 下 MySQL/MariaDB 忘記 root 密碼,**skip-grant-tables 臨時跳過授權表** 是標準重置路徑。核心風險在於**無授權狀態下的極高權限暴露**,務必做到:配置隔離、網絡隔離、最小時間窗、操作即恢復、驗證新密碼。平時應建立密碼管理規範(密碼管理器、定期輪換、應急預案演練),避免頻繁使用此方案。

copyright © 萬盛學電腦網 all rights reserved