MySQL GRANT 權限分級配置:從單庫到全庫、從單 IP 到全網
權限模板速查
| 需求 | SQL 範例 | 說明 |
訪問單庫 test | GRANT ALL PRIVILEGES ON test.* TO 'root'@'%'; | root、空密碼、全網可連 |
| 訪問所有庫 | GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; | 最高權限,生產禁用 |
指定用戶 liuhui | GRANT ALL PRIVILEGES ON *.* TO 'liuhui'@'%'; | 空密碼 |
| 指定用戶 + 密碼 | GRANT ALL PRIVILEGES ON *.* TO 'liuhui'@'%' IDENTIFIED BY 'liuhui'; | 密碼 liuhui |
| 限定來源 IP | GRANT ALL PRIVILEGES ON *.* TO 'liuhui'@'10.2.1.11'; | 僅 10.2.1.11 可連 |
| 單表權限 | GRANT SELECT, INSERT ON test.orders TO 'app'@'%'; | 精確到表 |
| 欄位級權限 | GRANT SELECT (id, name) ON test.users TO 'app'@'%'; | 精確到欄位 |
權限層級說明
*.*:全庫全表(超級管理員)
db.*:單庫所有表
db.table:單表
db.table(col1, col2):欄位級
PROCEDURE/FUNCTION:存儲過程/函數執行權限
主機匹配規則
%:任意主機(含 localhost)
localhost:本機 Unix socket 連接
192.168.1.%:IP 段通配
host.example.com:主機名(需 DNS 解析)
生效與撤銷
FLUSH PRIVILEGES; -- 修改 mysql.user 表後需刷新(GRANT 自動生效)
-- 撤銷
REVOKE ALL PRIVILEGES ON *.* FROM 'liuhui'@'%';
MySQL 8.0+ 新語法
CREATE USER 'liuhui'@'%' IDENTIFIED BY 'liuhui';
GRANT ALL PRIVILEGES ON *.* TO 'liuhui'@'%';
-- 不再支援 GRANT ... IDENTIFIED BY