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

MySQL 修改密碼與用戶權限設定完整指南

     編輯:MySQL 資料庫相關知識

MySQL 因開源、穩定且與 PHP 完美搭配,成為網站後端資料庫首選。為保障資料安全,掌握密碼變更與精細權限控管至關重要。本文系統整理六種修改密碼方法與兩種權限設定方式,適用 MySQL 5.7/8.0 環境。

一、修改密碼六大方法(需 root 權限)

方法一:phpMyAdmin 圖形介面(最直觀)

  • 登入 phpMyAdmin → 選擇 mysql 資料庫 → user 表。
  • 編輯對應用戶列,authentication_string(或舊版 Password)欄位選擇 PASSWORD 函數,輸入新密碼存檔。
  • 或直接執行 SQL:UPDATE mysql.user SET authentication_string=PASSWORD('newpwd') WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;

方法二:mysqladmin 命令列工具

mysqladmin -u root -p'oldpassword' password 'newpasswd'
  • 將 root 換成目標用戶名即可修改該用戶密碼。
  • 缺點:無法將密碼設為空字串;若 mysqladmin 連不上伺服器則無效。

方法三:INSERT 新增用戶並設密碼

INSERT INTO mysql.user (Host, User, authentication_string)
VALUES ('%', 'system', PASSWORD('manager'));
FLUSH PRIVILEGES;
  • 實為新增用戶,Host 設 % 允許任意主機連線。
  • MySQL 5.7+ 欄位為 authentication_string,8.0 建議改用 CREATE USER / ALTER USER。

方法四:REPLACE INTO 覆寫或新增

REPLACE INTO mysql.user (Host, User, authentication_string)
VALUES ('%', 'system', PASSWORD('manager'));
FLUSH PRIVILEGES;
  • 若主鍵 (Host,User) 存在則更新,否則插入。

方法五:SET PASSWORD 語句(推薦 5.7+)

SET PASSWORD FOR 'system'@'%' = PASSWORD('manager');
  • 無需 FLUSH PRIVILEGES,立即生效。
  • MySQL 8.0 建議改用:ALTER USER 'system'@'%' IDENTIFIED BY 'manager';

方法六:GRANT ... IDENTIFIED BY 授權同時設密碼

GRANT USAGE ON *.* TO 'system'@'%' IDENTIFIED BY 'manager';
  • 不需 PASSWORD() 函數,也不需 FLUSH PRIVILEGES。
  • MySQL 8.0 IDENTIFIED BY 已移至 CREATE USER / ALTER USER,GRANT 不再支援設密碼。

二、用戶存取權限設定兩大方式

方式一:GRANT 指令授權(推薦,語法簡潔、不易出錯)

-- 建立超級用戶 system,密碼 manager,允許本機連線,可授權他人
GRANT ALL PRIVILEGES ON *.* TO 'system'@'localhost' IDENTIFIED BY 'manager' WITH GRANT OPTION;

-- 建立管理用戶 admin,僅有 RELOAD、PROCESS 權限,無密碼
GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';

-- 建立無權限用戶 dummy,僅能連線
GRANT USAGE ON *.* TO 'dummy'@'localhost';
  • WITH GRANT OPTION 允許該用戶將自己的權限授予他人。
  • 主機名 localhost 僅限本機;% 允許遠端。兩者需分別授權,否則匿名用戶優先順序可能導致連線被拒。

方式二:直接操作 mysql.user 表(舊版相容,較繁瑣)

-- 超級用戶(14 個 Y 對應 3.22 版 14 欄位權限)
INSERT INTO mysql.user
VALUES ('localhost','system',PASSWORD('manager'),
        'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

-- 管理用戶:僅設定 Reload_priv、Process_priv
INSERT INTO mysql.user SET Host='localhost', User='admin',
    Reload_priv='Y', Process_priv='Y';

-- 無權限用戶
INSERT INTO mysql.user (Host, User, Password) VALUES ('localhost','dummy','');
FLUSH PRIVILEGES;

權限欄位對照(MySQL 3.22 版 14 欄位):

三、建立資料庫並指派權限實務流程

-- 1. 建立資料庫
CREATE DATABASE XinXiKu;

-- 2. 建立用戶並授權(MySQL 5.7+ 推薦寫法)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON XinXiKu.* TO 'app_user'@'%';
FLUSH PRIVILEGES;

四、MySQL 8.0 重要變更提醒

  • PASSWORD() 函數已移除,密碼雜湊改用 caching_sha2_password。
  • 建立用戶請用 CREATE USER 'user'@'host' IDENTIFIED BY 'pwd';
  • 修改密碼請用 ALTER USER 'user'@'host' IDENTIFIED BY 'newpwd';
  • GRANT 不再支援 IDENTIFIED BY,權限與認證分離。
  • mysql.user 表結構變動大,不建議直接 INSERT/UPDATE。

遵循最小權限原則,定期審核用戶權限,搭配強密碼策略,能大幅降低資料庫被滲透風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
權限欄位名說明層級
SELECTSelect_priv查詢資料表
INSERTInsert_priv新增資料表
UPDATEUpdate_priv修改資料表
DELETEDelete_priv刪除資料表
CREATECreate_priv建立庫/表/索引庫/表/索引
DROPDrop_priv刪除庫/表庫/表
RELOADReload_priv重讀授權表伺服器管理
SHUTDOWNShutdown_priv關閉伺服器伺服器管理
PROCESSProcess_priv檢視執行緒伺服器管理
FILEFile_priv讀寫伺服器檔案檔案存取
GRANTGrant_priv授權給他人庫/表
REFERENCESReferences_priv外鍵參考庫/表
INDEXIndex_priv建立/刪除索引表
ALTERAlter_priv修改表結構表