mysql.user.Password **必須儲存 PASSWORD('plain') 雜湊值**,明文會導致認證永遠失敗。修改授權表後需 FLUSH PRIVILEGES 或 mysqladmin reload 生效。
USE mysql;
INSERT INTO user (Host,User,Password) VALUES ('%','newuser',PASSWORD('secret'));
FLUSH PRIVILEGES;
SET PASSWORD FOR 'newuser'@'%' = PASSWORD('secret');
-- 或更新自己密碼
SET PASSWORD = PASSWORD('newpass');
GRANT ALL ON db_name.* TO 'newuser'@'%' IDENTIFIED BY 'secret';
-- 自動加密、自動建 user 表記錄、自動生效
# 設定 root 密碼(首次無舊密碼)
mysqladmin -u root password 'newpass'
# 修改既有密碼
mysqladmin -u root -p'oldpass' password 'newpass'
mysql -u newuser -p'secret' -e "SELECT CURRENT_USER();"
# 成功回傳 newuser@%
PASSWORD() 為 16 位,MySQL 4.1+ 為 41 位,客戶端協議必須匹配(參見文章 91190)。FLUSH PRIVILEGES 僅在直接 DML 操作授權表時需要;GRANT/SET PASSWORD/mysqladmin 內建生效。--defaults-extra-file 或交互式輸入。