首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 密碼管理全攻略:三種修改方式、Root 忘記密碼重置、密碼策略與插件

     編輯:MySQL 綜合教學

MySQL 密碼體系特點

  • 用戶 = 用戶名@主機(如 root@localhost),同名不同主機視為不同用戶
  • 密碼存儲於 mysql.user 表 authentication_string (5.7+) / Password (5.6)
  • 加密演算法:caching_sha2_password (8.0 預設)、mysql_native_password (5.7 預設)、old_passwords (舊版)

三種標準修改方式

方式 1:ALTER USER(8.0+ 推薦,標準 SQL)


-- 修改當前用戶
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;

方式 2:SET PASSWORD(5.7+ 支援,簡潔)


-- 當前用戶
SET PASSWORD = 'new_pass';

-- 指定用戶
SET PASSWORD FOR 'app'@'%' = 'new_pass';

方式 3:mysqladmin 命令列(運維腳本首選)


# 已知舊密碼
mysqladmin -u app -p'old_pass' password 'new_pass'

# 無舊密碼(需免密登入或 --skip-grant-tables)
mysqladmin -u root password 'new_pass'

Root 忘記密碼:緊急重置標準流程

Linux


# 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

Windows


# 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

密碼策略與 validate_password 插件


# 安裝 (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_password8.0 預設SHA-256 + 緩存、安全性最高、需驅動 8.0+新架構、高安全要求
mysql_native_password5.7 預設SHA-1、廣泛兼容、相對較弱舊驅動、過渡期
sha256_password5.6+SHA-256、需 SSL/RSA特定合規要求

-- 修改用戶認證插件
ALTER USER 'app'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';

避坑指南

  1. FLUSH PRIVILEGES 必須在 --skip-grant-tables 下修改 user 表後執行,否則不生效
  2. Host 匹配精確:'root'@'localhost' ≠ 'root'@'127.0.0.1' ≠ 'root'@'%'
  3. 密碼含特殊字符:命令列用單引號包裹,或用 --password='...'
  4. 8.0 PASSWORD() 函數已移除,不可用 UPDATE ... SET authentication_string=PASSWORD('x')
  5. 應用層連線池密碼同步:修改後需滾動重啟應用或熱更新配置

總結

密碼管理核心:**標準化用 ALTER USER、緊急重置走 --skip-grant-tables + FLUSH PRIVILEGES、強制策略裝 validate_password、認證插件按兼容性選擇、修改後同步應用層**。建立「密碼變更 SOP」,納入變更管理流程,審計留痕。

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