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

MySQL Root 賬戶密碼設置三大法:SET PASSWORD、mysqladmin 與 UPDATE user 表直觀對比

     編輯:MySQL 綜合教學

背景

全新安裝 MySQL 後,root@localhost 往往無密碼。官方文檔提供三種設置密碼方式,本文對比其語法、適用場景與底層機制。

方式一:SET PASSWORD 語句 (標準 SQL)

需登入 MySQL 客戶端。

Windows / Unix 通用

mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');

Unix 專用 (主機名)

mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');
  • PASSWORD() 函數加密存儲 (MySQL 8.0 棄用,改用 caching_sha2_password 原生認證)。
  • 需分別設置 localhost (Socket) 和 %/host_name (TCP) 兩個賬號。

方式二:mysqladmin 客戶端工具 (命令行非交互)

無需進入 MySQL Shell,適合腳本自動化。

# 本機
mysqladmin -u root password "newpwd"

# 指定主機 (遠程/TCP)
mysqladmin -u root -h host_name password "newpwd"
  • 密碼含特殊字符/空格需雙引號。
  • 適用 Windows/Unix 統一語法。
  • 本質執行 UPDATE mysql.user SET Password=PASSWORD(...) + FLUSH PRIVILEGES。

方式三:直接 UPDATE mysql.user 表 (底層直擊)

mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
  • 單條語句同時更新所有 root 賬號 (localhost, %, host_name)。
  • 必須 執行 FLUSH PRIVILEGES 刷新權限緩存,否則不生效。
  • 風險:繞過權限系統檢查,誤操作易導致鎖死自己。

三種方式對比

維度SET PASSWORDmysqladminUPDATE user
交互方式SQL 客戶端Shell 命令SQL 客戶端
自動化適合度中 (需 expect/管道)⭐⭐⭐⭐⭐中
賬號覆蓋範圍單賬號/條 (需多條)單賬號/條全匹配 User='root' (最全)
權限刷新隱式隱式**顯式 FLUSH PRIVILEGES**
安全性標準標準低 (直接改系統表)
MySQL 8.0 兼容棄用 PASSWORD()支援 (內部改用 ALTER USER)不建議 (認證插件變更)

MySQL 8.0+ 現代最佳實踐

-- 推薦:ALTER USER (原生認證插件 caching_sha2_password)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpwd';
ALTER USER 'root'@'%' IDENTIFIED BY 'newpwd';

-- 或創建專用管理員賬號,禁用 root 遠程
CREATE USER 'admin'@'%' IDENTIFIED BY 'strong_pwd';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
FLUSH PRIVILEGES;

驗證與後續操作

# 測試新密碼關閉服務
mysqladmin -u root -p shutdown
Enter password: newpwd

總結

  • 日常管理:用 ALTER USER (8.0+) 或 SET PASSWORD (5.7)。
  • 腳本/自動化部署:用 mysqladmin password。
  • 緊急搶救/批量更新:謹慎用 UPDATE mysql.user + FLUSH PRIVILEGES。
  • 核心原則:設置密碼後**立即驗證**,禁用無密碼/弱密碼 root 遠程登入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved