直接操作 mysql.user 表(INSERT/UPDATE)時,必須用 PASSWORD() 加密;使用 GRANT ... IDENTIFIED BY、SET PASSWORD、mysqladmin password 等內建指令則自動加密,切勿雙重加密。
INSERT INTO user (Host, User, Password) VALUES ('%', 'jeffrey', 'biscuit');
FLUSH PRIVILEGES;
-- 結果:user 表存明文 'biscuit'
-- 客戶端送入 PASSWORD('biscuit') 雜湊值,比對失敗 → Access denied
| 操作方式 | SQL 範例 | 是否需手動 PASSWORD() |
|---|---|---|
| INSERT 直接寫 user 表 | INSERT INTO user (Host,User,Password) VALUES ('%','jeffrey',PASSWORD('biscuit')); | 是 |
| UPDATE 直接改 user 表 | UPDATE user SET Password=PASSWORD('biscuit') WHERE User='jeffrey'; | 是 |
| SET PASSWORD 指令 | SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit'); | 是(5.7.6 前) 5.7.6+ 可直接 = 'biscuit' |
| GRANT ... IDENTIFIED BY | GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit'; | 否(自動加密) |
| mysqladmin 指令列 | mysqladmin -u jeffrey password 'biscuit' | 否(自動加密) |
Password 欄位更名為 authentication_string。SET PASSWORD FOR user = 'plaintext' 可直接寫明文,系統自動雜湊(採用 caching_sha2_password 或 mysql_native_password)。PASSWORD() 函數已棄用,8.0 移除。GRANT ... IDENTIFIED BY 或 ALTER USER ... IDENTIFIED BY(8.0+),避免手動加密出錯。CREATE USER ... IDENTIFIED BY + GRANT 分離。PASSWORD() 與系統 /etc/shadow 雜湊相容,兩者演算法完全不同。原文標題:MySQL:怎樣設置口令
連結:https://www.cnblogs.com/linlu11/archive/2009/11/07/1598259.html