mysql.user 表損壞my.cnf ([mysqld] 區段) 添加:skip-grant-tables
skip-networking # 可選:臨時阻斷網絡連接,防併發修改
systemctl restart mysqldmysql -u rootFLUSH PRIVILEGES; -- 必須先執行,刷新 skip-grant-tables 狀態
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或 UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES; (舊版)
skip-grant-tables、skip-networking,重啟驗證新密碼mv /var/lib/mysql /var/lib/mysql.bak_$(date +%F)mysqld --initialize-insecure --datadir=/var/lib/mysql --user=mysql
# 生成隨機 root 密碼 (insecure) 或臨時密碼 (secure),記錄日誌
# 方法 A:表級拷貝 (MyISAM/同版本 InnoDB)
cp -r /var/lib/mysql.bak/dbname /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/dbname
# 方法 B:邏輯導入 (跨版本/引擎安全)
mysqldump --all-databases -u root -p < /var/lib/mysql.bak/... > dump.sql
mysql -u root -p < dump.sql
| 檢查項 | 命令/方法 | 異常指標 |
|---|---|---|
| 用戶賬號 | SELECT User, Host, authentication_string FROM mysql.user; | 未知用戶、% 主機、空密碼 |
| 權限異常 | SHOW GRANTS FOR 'user'@'host'; | FILE/SUPER/PROCESS 權限異常授予 |
| 定時任務 | SELECT * FROM mysql.event; | 可疑 EVENT、SHELL 命令 |
| UDF 注入 | SELECT * FROM mysql.func; / 檢查 plugin_dir | 未知函數、惡意 DLL/so |
| Binlog 異常 | mysqlbinlog --base64-output=decode-rows -v mysql-bin.000xxx | 大量 DDL/DML、非業務時間操作 |
| 錯誤日誌 | grep -i 'access denied\|aborted\|killed' /var/log/mysql/error.log | 暴力破解、異常斷連 |
| 系統層面 | last -20、history、crontab -l、systemd-analyze | 異地登入、可疑命令、定時反彈 |
skip-grant-tables 是 MySQL 密碼恢複的「萬能鑰匙」,但**真正的安全不在於有後門能進,而在於前門鎖得有多牢、鑰匙管得有多嚴、入侵後能查得有多透**。建立「密碼全生命週期管理 + 運維操作審計 + 定期滲透演練」體系,才是生產環境的根本之道。