用戶名@主機(如 root@localhost),同名不同主機視為不同用戶mysql.user 表 authentication_string (5.7+) / Password (5.6)caching_sha2_password (8.0 預設)、mysql_native_password (5.7 預設)、old_passwords (舊版)
-- 修改當前用戶
ALTER USER USER() IDENTIFIED BY 'new_pass';
-- 修改指定用戶(需 SUPER/GRANT OPTION)
ALTER USER 'app'@'%' IDENTIFIED BY 'new_pass';
-- 修改並設定過期策略
ALTER USER 'app'@'%' IDENTIFIED BY 'new_pass' PASSWORD EXPIRE INTERVAL 90 DAY;
-- 當前用戶
SET PASSWORD = 'new_pass';
-- 指定用戶
SET PASSWORD FOR 'app'@'%' = 'new_pass';
# 已知舊密碼
mysqladmin -u app -p'old_pass' password 'new_pass'
# 無舊密碼(需免密登入或 --skip-grant-tables)
mysqladmin -u root password 'new_pass'
# 1. 停止服務
systemctl stop mysqld
# 2. 跳過權限表啟動
mysqld_safe --skip-grant-tables --skip-networking &
# 或 systemd 臨時覆蓋
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
systemctl start mysqld
# 3. 免密登入修改
mysql -u root
FLUSH PRIVILEGES; -- 必須先執行,否則 user 表不可寫
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_strong_pass';
-- 或 5.6: UPDATE mysql.user SET Password=PASSWORD('new_pass') WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;
# 4. 正常重啟
systemctl stop mysqld
systemctl unset-environment MYSQLD_OPTS
systemctl start mysqld
# 1. 停止服務
net stop MySQL
# 2. 建立初始化文件 init.txt
# 內容:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_strong_pass';
# 3. 啟動讀取初始化文件
mysqld --defaults-file="D:\MySQL\my.ini" --init-file="D:\MySQL\init.txt" --console
# 4. 看到 "ready for connections" 後 Ctrl+C 停止,移除 init.txt,正常啟動服務
net start MySQL
# 安裝 (5.7+ 內建)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
# 配置 my.cnf
[mysqld]
validate_password_policy=MEDIUM # LOW/MEDIUM/STRONG
validate_password_length=12
validate_password_mixed_case_count=1
validate_password_number_count=1
validate_password_special_char_count=1
validate_password_dictionary_file=/usr/share/mysql/dict.txt
策略等級:
LOW:僅長度MEDIUM:長度 + 大小寫 + 數字 + 特殊字符STRONG:MEDIUM + 字典檢查| 插件 | 版本 | 特點 | 適用場景 |
|---|---|---|---|
caching_sha2_password | 8.0 預設 | SHA-256 + 緩存、安全性最高、需驅動 8.0+ | 新架構、高安全要求 |
mysql_native_password | 5.7 預設 | SHA-1、廣泛兼容、相對較弱 | 舊驅動、過渡期 |
sha256_password | 5.6+ | SHA-256、需 SSL/RSA | 特定合規要求 |
-- 修改用戶認證插件
ALTER USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
'root'@'localhost' ≠ 'root'@'127.0.0.1' ≠ 'root'@'%'--password='...'UPDATE ... SET authentication_string=PASSWORD('x')密碼管理核心:**標準化用 ALTER USER、緊急重置走 --skip-grant-tables + FLUSH PRIVILEGES、強制策略裝 validate_password、認證插件按兼容性選擇、修改後同步應用層**。建立「密碼變更 SOP」,納入變更管理流程,審計留痕。