方法一:SET PASSWORD 語法(推薦)
修改當前登錄用戶密碼
SET PASSWORD = PASSWORD('new_password');
修改指定用戶密碼(需 SUPER 權限)
SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');
username@host 必須與 mysql.user 表記錄完全一致(含主機名通配符 %)。
PASSWORD() 函數加密後存儲,不可用明文。
方法二:UPDATE mysql.user 表(兼容舊版/特殊場景)
-- 1. 以 root 登錄
mysql -u root -p
-- 2. 更新密碼
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'username' AND host = 'host';
-- MySQL 5.7+ 字段為 authentication_string,5.6 為 password
-- 3. 刷新權限生效
mysql> FLUSH PRIVILEGES;
完整實操範例
# 登錄
mysql -u root -p
Enter password: ******
# 修改普通用戶 app_user@% 密碼為 P@ssw0rd123
mysql> SET PASSWORD FOR 'app_user'@'%' = PASSWORD('P@ssw0rd123');
Query OK, 0 rows affected (0.01 sec)
# 或用 UPDATE(5.7+)
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('P@ssw0rd123') WHERE user = 'app_user' AND host = '%';
mysql> FLUSH PRIVILEGES;
# 驗證
mysql> EXIT;
shell> mysql -u app_user -p'P@ssw0rd123' -e "SELECT 1;"
+---+
| 1 |
+---+
| 1 |
+---+
注意事項
- MySQL 5.7+ 默認密碼插件
mysql_native_password,PASSWORD() 生成 41 位十六進制 hash。
- MySQL 8.0 默認
caching_sha2_password,建議用 ALTER USER 'user'@'host' IDENTIFIED BY 'pwd'; 替代。
- 修改 root 密碼同理,但需注意
host 匹配(localhost vs 127.0.0.1 vs %)。
- 權限變更必須
FLUSH PRIVILEGES 或重啟服務生效(SET PASSWORD 自動刷新)。