MySQL 權限系統採用「主機+用戶」雙維度,配合 GRANT 精細控制庫、表、欄位級權限。本文提供三類典型帳號建立範本,涵蓋超級管理員、本地唯讀、特定 IP+特定庫,掌握模式即可靈活組合。
GRANT 權限列表 ON 資料庫.表 TO '用戶'@'主機' IDENTIFIED BY '密碼'; FLUSH PRIVILEGES;
-- 必須建立兩條:% 匹配遠程,localhost 匹配本地 socket GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON *.* TO 'reson1'@'%' IDENTIFIED BY '123456'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON *.* TO 'reson1'@'localhost' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
說明: *.* 表示所有庫所有表;% 通配所有 IP;localhost 走 Unix socket,兩者缺一不可。
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'reson2'@'localhost' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
適用於本機腳本、備份工具、監控腳本。
GRANT SELECT,INSERT,UPDATE,DELETE ON dat1.* TO 'reson3'@'192.168.1.100' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
適用於應用伺服器固定 IP、最小權限原則。
| 需求 | GRANT 子句 |
|---|---|
| 僅查詢 | GRANT SELECT ON db.* TO 'u'@'h' |
| 查詢+鎖表 | GRANT SELECT,LOCK TABLES ON db.* TO 'u'@'h' |
| 建表/改結構 | GRANT CREATE,ALTER,DROP ON db.* TO 'u'@'h' |
| 建視圖/存儲過程 | GRANT CREATE VIEW,CREATE ROUTINE ON db.* TO 'u'@'h' |
| 備份權限 | GRANT SELECT,LOCK TABLES,SHOW VIEW,RELOAD,PROCESS ON *.* TO 'backup'@'%' |
| 複制從庫帳號 | GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%' IDENTIFIED BY 'pwd' |
DROP USER ''@'localhost'; 刪除安裝殘留的匿名帳號。caching_sha2_password,舊驅動需 ALTER USER 'u'@'h' IDENTIFIED WITH mysql_native_password BY 'pwd';。FLUSH PRIVILEGES; 或重新連線。skip-name-resolve 開啟時僅比對 IP,避免 DNS 延遲。遵循最小權限原則,按「業務角色 → 所需庫表 → 所需操作 → 允許來源 IP」四步建模,即可構建安全可控的 MySQL 存取體系。