首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 使用者密碼設定全攻略:PASSWORD() 加密、GRANT 自動加密與 mysqladmin 指令

     編輯:MySQL 資料庫相關知識

核心原則:密碼必須加密儲存

mysql.user.Password 欄位儲存的是 PASSWORD('明文') 的雜湊值,絕不可直接寫明文,否則驗證永遠失敗。

四大設定密碼管道

1. SQL 語句 (需 FLUSH PRIVILEGES)

USE mysql;
INSERT INTO user (Host, User, Password) VALUES ('%', 'user', PASSWORD('pass'));
FLUSH PRIVILEGES;

-- 或
SET PASSWORD FOR 'user'@'%' = PASSWORD('pass');

2. GRANT 語句 (推薦,自動加密、無需 FLUSH)

GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'pass';
-- 或僅建立用戶不給權限
GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'pass';

3. mysqladmin 指令列 (適用腳本自動化)

# 設定 root 密碼 (初次安裝)
mysqladmin -u root password 'newpass'

# 修改現有密碼 (需知舊密碼)
mysqladmin -u root -p'oldpass' password 'newpass'

4. 修改現有用戶密碼 (三種 SQL 寫法)

-- 方法 A
UPDATE mysql.user SET Password=PASSWORD('newpass') WHERE User='user' AND Host='%';
FLUSH PRIVILEGES;

-- 方法 B
SET PASSWORD FOR 'user'@'%' = PASSWORD('newpass');

-- 方法 C
GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'newpass';

重新載入授權表

  • SQL 修改 user 表後:FLUSH PRIVILEGES;
  • Shell 指令:mysqladmin -u root reload 或 mysqladmin -u root flush-privileges
  • GRANT/SET PASSWORD/mysqladmin password 會自動重載,無需手動 FLUSH。

常見錯誤與排查

現象原因解決
Access denied密碼未加密/Host 不匹配檢查 PASSWORD()、Host 欄位
密碼修改不生效未執行 FLUSH PRIVILEGES執行 FLUSH 或重啟 mysqld
舊版客戶端連不上 4.1+認證協定不相容用 OLD_PASSWORD() 或升級客戶端
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved