MySQL user 表存儲的是 PASSWORD() 加密後的哈希值,**絕不可**直接寫入明文密碼。
CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass#2024';
ALTER USER 'app'@'%' IDENTIFIED BY 'NewStrongPass#2024';
SET PASSWORD FOR 'app'@'%' = 'NewStrongPass#2024';
-- 或舊版語法
SET PASSWORD FOR 'app'@'%' = PASSWORD('NewStrongPass#2024');
GRANT SELECT, INSERT ON `shop`.* TO 'reader'@'%' IDENTIFIED BY 'ReadOnly#2024';
USE mysql;
UPDATE user SET authentication_string = PASSWORD('NewPass#2024')
WHERE User = 'app' AND Host = '%';
FLUSH PRIVILEGES;
# root 修改自身密碼
mysqladmin -u root -p'oldPass' password 'NewStrongPass#2024'
# 修改其他用戶(需 SUPER 權限)
mysqladmin -u root -p'rootPass' -u 'app' password 'NewPass#2024'
# 重新連線測試
mysql -u app -p'NewStrongPass#2024' -e "SELECT CURRENT_USER();"
password_expired 強制變更。default_authentication_plugin = caching_sha2_password(8.0 預設)。SELECT User, Host FROM mysql.user WHERE authentication_string = '' OR authentication_string IS NULL;root@%,僅允許 root@localhost 或 root@127.0.0.1。| 現象 | 原因 | 解決 |
|---|---|---|
| 密碼修改後舊連線仍可用 | 連線池未重連 | 應用端重建連線池或重啟服務 |
| 5.7.6+ 已移除 | 改用 ALTER USER 或 SET PASSWORD 新語法 | |
| 權限不足 | 使用 root 或具備 RELOAD 權限帳號 |