MySQL 權限系統靈活強大,新增用戶、分配權限有兩條路徑:推薦的 GRANT 語句,與底層直接操作 mysql.user、db 等授權表。本文雙軌並行,讓你深入理解權限本質。
GRANT 權限列表 ON 資料庫.表 TO '用戶'@'主機' IDENTIFIED BY '密碼' [WITH GRANT OPTION];
-- 1. 超級管理員(全庫全表所有權限,含授權權限)
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'pass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;
-- 2. 運維帳號(僅管理權限,無資料權限)
GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';
-- 3. 佔位用戶(無任何權限,後續再給)
GRANT USAGE ON *.* TO 'dummy'@'localhost';
monty@localhost 和 monty@% 必須都建立,否則匿名用戶 @localhost 優先級更高會攔截連線。WITH GRANT OPTION 允許該用戶把自己的權限轉授給他人。USAGE 等同於「無權限」,用於先建帳號再補權限。-- 1. 超級管理員(需填滿所有權限欄位為 'Y')
INSERT INTO user VALUES('localhost','monty',PASSWORD('pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
INSERT INTO user VALUES('%','monty',PASSWORD('pass'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-- 2. 運維帳號(只給 RELOAD、PROCESS)
INSERT INTO user SET Host='localhost', User='admin', Reload_priv='Y', Process_priv='Y';
-- 3. 佔位用戶
INSERT INTO user (Host,User,Password) VALUES('localhost','dummy','');
-- 關鍵:修改授權表後必須刷新生效
FLUSH PRIVILEGES;
-- 用戶 custom 從不同主機連線,對不同庫有不同權限
INSERT INTO user (Host,User,Password) VALUES('localhost','custom',PASSWORD('stupid'));
INSERT INTO user (Host,User,Password) VALUES('server.domain','custom',PASSWORD('stupid'));
INSERT INTO user (Host,User,Password) VALUES('whitehouse.gov','custom',PASSWORD('stupid'));
INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)
VALUES('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)
VALUES('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)
VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');
FLUSH PRIVILEGES;
-- GRANT 寫法
GRANT ... ON *.* TO 'user'@'%.mydomain.com' IDENTIFIED BY 'pass';
-- 直接操作 user 表
INSERT INTO user VALUES ('%.mydomain.com','user',PASSWORD('pass'),...);
FLUSH PRIVILEGES;
圖形化工具:phpMyAdmin、MySQL Workbench、Adminer 皆提供直觀權限管理介面,生產環境建議使用工具降低手誤風險。
| 維度 | GRANT | 直接操作授權表 |
|---|---|---|
| 密碼加密 | 自動 PASSWORD() | 手動呼叫 PASSWORD() |
| 生效方式 | 即時 | 需 FLUSH PRIVILEGES |
| 錯誤風險 | 低 | 高(欄位順序、數量易對錯) |
| 適用版本 | 3.22.11+ | 所有版本 |