# 1. 登入 MySQL
mysql -u root -p
# 2. 切換到 mysql 系統庫
USE mysql;
# 3. 更新密碼 (MySQL 5.7+ authentication_string 欄位)
UPDATE user SET authentication_string = PASSWORD('NewPass123!') WHERE User = 'hunte';
# 4. 刷新權限緩存 (關鍵!否則不生效)
FLUSH PRIVILEGES;
# 5. 退出驗證
QUIT
mysql -u hunte -p'NewPass123!'
版本差異:MySQL 5.6 及以前用 `Password` 欄位;5.7+ 用 `authentication_string`;8.0 建議用 `ALTER USER`。
mysql -u root -p
-- MySQL 5.7/8.0 語法
SET PASSWORD FOR 'hunte'@'%' = 'NewPass123!';
-- 或指定插件 (8.0+)
SET PASSWORD FOR 'hunte'@'%' = PASSWORD('NewPass123!'); -- 兼容寫法
-- 5.6 舊語法 (已棄用)
SET PASSWORD FOR 'hunte'@'%' = PASSWORD('NewPass123!');
-- 無需手動 FLUSH PRIVILEGES
# 修改當前用戶密碼 (需知舊密碼)
mysqladmin -u hunte -p'OldPass' password 'NewPass123!'
# Root 修改其他用戶密碼 (需 root 權限)
mysqladmin -u root -p'RootPass' password 'NewPass123!' -u hunte
# 注意:-u hunte 指定目標用戶,但某版本 mysqladmin 不支援此語法,建議用 SQL 方式
-- 基本修改
ALTER USER 'hunte'@'%' IDENTIFIED BY 'NewPass123!';
-- 指定認證插件 (兼容舊驅動)
ALTER USER 'hunte'@'%' IDENTIFIED WITH mysql_native_password BY 'NewPass123!';
-- 密碼過期策略
ALTER USER 'hunte'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'hunte'@'%' PASSWORD HISTORY 5; -- 禁止重用最近 5 次密碼
ALTER USER 'hunte'@'%' PASSWORD REUSE INTERVAL 365 DAY; -- 1 年內不得重用
ALTER USER 'hunte'@'%' FAILED_LOGIN_ATTEMPTS 5; -- 5 次失敗鎖定
ALTER USER 'hunte'@'%' PASSWORD_LOCK_TIME 2; -- 鎖定 2 天
-- 解鎖
ALTER USER 'hunte'@'%' ACCOUNT UNLOCK;
# 1. 停止服務
systemctl stop mysqld 或 net stop MySQL80
# 2. 跳過授權表、跳過網絡啟動
mysqld_safe --skip-grant-tables --skip-networking &
# Windows: mysqld --skip-grant-tables --skip-networking
# 3. 無密碼登入
mysql -u root
# 4. 修復權限表 (若損壞) 並修改密碼
FLUSH PRIVILEGES; -- 必須先執行,否則 UPDATE 無效
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewRootPass123!';
-- 或 5.7 語法
UPDATE mysql.user SET authentication_string = PASSWORD('NewRootPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
# 5. 正常重啟
mysqladmin -u root -p'NewRootPass123!' shutdown
systemctl start mysqld
-- 查看當前策略
SHOW VARIABLES LIKE 'validate_password%';
-- 臨時降低策略等級 (僅當前會話/全局)
SET GLOBAL validate_password.policy = LOW; -- LOW/MEDIUM/STRONG
SET GLOBAL validate_password.length = 4; -- 最小長度
-- 修改密碼
ALTER USER 'hunte'@'%' IDENTIFIED BY 'short';
-- 恢復生產策略
SET GLOBAL validate_password.policy = MEDIUM;
SET GLOBAL validate_password.length = 8;
| 錯誤 | 原因 | 解決 |
|---|---|---|
| ERROR 1819 (HY000): Your password does not satisfy the current policy requirements | 密碼不符合 validate_password 策略 | 提供更強密碼、或臨時降低策略等級 |
| ERROR 1396 (HY000): Operation ALTER USER failed for 'user'@'%' | 用戶不存在 / Host 不匹配 | SELECT User, Host FROM mysql.user 確認確切用戶名 |
| FLUSH PRIVILEGES 後仍不生效 | 未提交事務 / 權限表損壞 / 緩存未刷 | 重新執行 FLUSH PRIVILEGES;檢查 mysql.user 表數據 |
| mysqladmin password 報錯 | 舊密碼錯誤 / 語法不支援指定目標用戶 | 改用 SQL 方式 ALTER USER / SET PASSWORD |
密碼管理是資料庫安全的第一道防線。掌握標準修改方法、理解版本差異、建立自動化輪換流程、準備緊急救援預案,才能在合規審計、安全事件、版本升級等場景中從容應對。