MySQL user 表中 password 列存儲的是 PASSWORD() 函數加密後的哈希值,**絕不可直接存明文**。直接 INSERT ... VALUES('plain') 會導致認證失敗。
-- 創建用戶並設置密碼
INSERT INTO mysql.user (Host, User, Password)
VALUES ('%', 'app_user', PASSWORD('securePass'));
FLUSH PRIVILEGES;
-- 修改現有用戶密碼
SET PASSWORD FOR 'app_user'@'%' = PASSWORD('newPass');
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'app_user'@'%' IDENTIFIED BY 'securePass';
-- 等同於創建用戶 + 授權 + 設置密碼,無需 FLUSH PRIVILEGES
# 修改 root 密碼
mysqladmin -u root password 'newRootPass'
# 修改其他用戶密碼 (需 root 權限)
mysqladmin -u root -p'rootPass' password 'newUserPass' -u app_user
password 列重命名為 authentication_string,PASSWORD() 函數已棄用,改用 ALTER USER ... IDENTIFIED BY'%' 允許遠程連接,'localhost' 僅本地,生產環境建議限制具體 IPGRANT ALL ON *.*,按庫/表/列授予必要權限validate_password 插件強制策略mysql -u app_user -p'securePass' -e "SELECT CURRENT_USER();"
# 成功返回當前用戶信息
參考文章 Windows 下 MySQL root 密碼重置失敗?完整排查指南 或 Linux 下 mysqld_safe --skip-grant-tables 流程。