MySQL 權限體系基於授權表 (mysql.user, db, tables_priv...),GRANT 是管理入口。本文系統整理 GRANT 語法、權限層級、常用權限對照表、典型授權場景與安全原則。
GRANT priv_type [(columns)] ON db.tbl TO 'user'@'host' IDENTIFIED BY 'pwd' [WITH GRANT OPTION];
ALL PRIVILEGES 代表除 GRANT OPTION 外所有權限。*.* (全局)、db.* (庫級)、db.tbl (表級)、db.* (列級需配合 columns)。'user'@'%' (任意 IP)、'user'@'localhost' (本地)、'user'@'192.168.1.%' (網段)。| 權限 | 授權表列 | 作用範圍 | 說明 |
|---|---|---|---|
| SELECT | Select_priv | 表 | 讀取數據 |
| INSERT | Insert_priv | 表 | 插入數據 |
| UPDATE | Update_priv | 表 | 修改數據 |
| DELETE | Delete_priv | 表 | 刪除數據 |
| INDEX | Index_priv | 表 | 創建/刪除索引 |
| ALTER | Alter_priv | 表 | 修改表結構 |
| CREATE | Create_priv | 庫/表/索引 | 創建對象 |
| DROP | Drop_priv | 庫/表 | 刪除對象 |
| GRANT OPTION | Grant_priv | 庫/表 | 授權給他人 |
| REFERENCES | References_priv | 庫/表 | 外鍵引用 (未實際生效) |
| RELOAD | Reload_priv | 服務器 | FLUSH 操作 |
| SHUTDOWN | Shutdown_priv | 服務器 | 關閉服務器 |
| PROCESS | Process_priv | 服務器 | 查看/殺死線程 |
| FILE | File_priv | 服務器文件 | LOAD DATA/SELECT INTO OUTFILE |
| REPLICATION SLAVE | Repl_slave_priv | 服務器 | 主從復制 |
| REPLICATION CLIENT | Repl_client_priv | 服務器 | SHOW MASTER/SLAVE STATUS |
| SUPER | Super_priv | 服務器 | CHANGE MASTER、KILL、SET GLOBAL 等 |
| ALL PRIVILEGES | - | 全局 | 除 GRANT OPTION 外所有權限 |
| USAGE | - | - | 無實際權限 (僅創建用戶) |
CREATE USER 'app'@'10.0.1.%' IDENTIFIED BY 'strong_pwd';
GRANT SELECT, INSERT, UPDATE, DELETE ON biz_db.* TO 'app'@'10.0.1.%';
CREATE USER 'ro'@'10.0.2.%' IDENTIFIED BY 'pwd';
GRANT SELECT ON biz_db.* TO 'ro'@'10.0.2.%';
CREATE USER 'dev'@'10.0.3.%' IDENTIFIED BY 'pwd';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON biz_db.* TO 'dev'@'10.0.3.%';
CREATE USER 'repl'@'10.0.0.%' IDENTIFIED BY 'pwd';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.%';
CREATE USER 'admin'@'10.0.0.10' IDENTIFIED BY 'very_strong_pwd';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'10.0.0.10' WITH GRANT OPTION;
-- 撤銷特定權限
REVOKE INSERT, UPDATE ON biz_db.* FROM 'app'@'10.0.1.%';
-- 撤銷所有權限 (不刪除用戶)
REVOKE ALL PRIVILEGES ON *.* FROM 'app'@'10.0.1.%';
-- 徹底刪除用戶 (MySQL 5.7+)
DROP USER 'app'@'10.0.1.%';
-- 5.6 及以下
DELETE FROM mysql.user WHERE User='app' AND Host='10.0.1.%';
FLUSH PRIVILEGES;
'%' 超級帳號,生產庫僅允許應用服務器 IP 段。validate_password 插件,強制長度、複雜度、過期輪換。SELECT User, Host FROM mysql.user;、SHOW GRANTS FOR 'user'@'host'; 清理僵尸帳號。CREATE ROLE 'app_rw'; GRANT SELECT,INSERT ON biz_db.* TO 'app_rw'; GRANT 'app_rw' TO 'app1'@'%'; 統一管理權限集合。