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

MySQL 新增用戶與授權完整教學:GRANT 指令與直操授權表兩大方式

     編輯:MySQL 資料庫相關知識

MySQL 用戶管理可透過 GRANT 指令(推薦)或直接操作 mysql.user 等授權表完成。本文詳細說明兩種方式的語法、範例與注意事項,助您精準控管資料庫存取權限。

方式一:使用 GRANT 指令(推薦)

GRANT 語法簡潔、自動處理權限刷新、不易出錯,支援主機通配符、密碼設定、權限層級(全域、資料庫、表、欄位)。

基本語法

GRANT privileges ON database.table TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];

實務範例

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

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

-- 3. 建立無權限用戶 dummy,僅能連線
GRANT USAGE ON *.* TO 'dummy'@'localhost';

關鍵說明

  • 雙重授權 localhost 與 %: MySQL 授權表排序優先精確匹配 Host,若僅授權 %,本機連線可能被 localhost 匿名用戶攔截導致拒絕。
  • WITH GRANT OPTION: 允許該用戶將自己擁有的權限授予其他用戶。
  • USAGE 權限: 僅建立用戶記錄,不賦予任何實質權限,後續可再 GRANT 具體權限。
  • 密碼設定: MySQL 5.7+ 建議改用 CREATE USER ... IDENTIFIED BY ... 再 GRANT,分離認證與授權。

方式二:直接操作授權表(進階/舊版相容)

透過 INSERT/UPDATE 修改 mysql.user、mysql.db、mysql.tables_priv 等表,最後必須執行 FLUSH PRIVILEGES 重讀生效。

對應上述範例的 INSERT 寫法

-- 超級用戶 monty(localhost 與 % 兩筆)
INSERT INTO mysql.user VALUES ('localhost','monty',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO mysql.user VALUES ('%','monty',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

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

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

FLUSH PRIVILEGES;

授權表結構與權限欄位(MySQL 5.7 user 表部分欄位)

MySQL 8.0 重要變更

  • PASSWORD() 移除,密碼雜湊改為 caching_sha2_password。
  • 建立用戶:CREATE USER 'user'@'host' IDENTIFIED BY 'pwd';
  • 授權:GRANT SELECT, INSERT ON db.* TO 'user'@'host';(不再支援 IDENTIFIED BY)。
  • mysql.user 表結構大幅變動(新增 authentication_string、plugin 等),強烈不建議直接 INSERT/UPDATE 授權表,請一律使用 CREATE USER、GRANT、ALTER USER。
  • 支援 ROLE 角色管理,便於批次授權。

最佳實務建議

  1. 優先使用 GRANT / CREATE USER 指令,避免直操系統表。
  2. 遵循最小權限原則:應用程式帳號僅授予必要資料庫的 SELECT/INSERT/UPDATE/DELETE。
  3. 生產環境禁用 root 遠端登入(Host 設 localhost 或特定 IP)。
  4. 定期審核 SHOW GRANTS FOR 'user'@'host'; 移除閒置帳號。
  5. 密碼策略:長度≥12、含大小寫數字符號、定期輪換、不重複使用。

掌握 MySQL 授權機制,能有效防範權限過大導致的資料洩露與誤操作風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
欄位權限範圍
Select_privSELECT全域/庫/表
Insert_privINSERT全域/庫/表
Update_privUPDATE全域/庫/表
Delete_privDELETE全域/庫/表
Create_privCREATE全域/庫/表
Drop_privDROP全域/庫/表
Reload_privFLUSH/RELOAD伺服器管理
Shutdown_privSHUTDOWN伺服器管理
Process_privPROCESS伺服器管理
File_privFILE伺服器檔案
Grant_privGRANT OPTION全域/庫/表
References_privREFERENCES全域/庫/表
Index_privINDEX全域/庫/表
Alter_privALTER全域/庫/表