首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 設定密碼正確姿勢:PASSWORD() 加密、GRANT/SET PASSWORD/mysqladmin 差異與避坑指南

     編輯:MySQL 綜合教學

核心原則

直接操作 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 BYGRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';否(自動加密)
mysqladmin 指令列mysqladmin -u jeffrey password 'biscuit'否(自動加密)

MySQL 5.7.6+ 重大變更

  • Password 欄位更名為 authentication_string。
  • SET PASSWORD FOR user = 'plaintext' 可直接寫明文,系統自動雜湊(採用 caching_sha2_password 或 mysql_native_password)。
  • PASSWORD() 函數已棄用,8.0 移除。

實務建議

  1. 優先使用 GRANT ... IDENTIFIED BY 或 ALTER USER ... IDENTIFIED BY(8.0+),避免手動加密出錯。
  2. 腳本中若需批次建帳號,用 CREATE USER ... IDENTIFIED BY + GRANT 分離。
  3. 切勿假設 PASSWORD() 與系統 /etc/shadow 雜湊相容,兩者演算法完全不同。
原文標題:MySQL:怎樣設置口令
連結:https://www.cnblogs.com/linlu11/archive/2009/11/07/1598259.html
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved