SHOW GRANTS FOR 'user'@'host';
-- 例
SHOW GRANTS FOR 'root'@'localhost';
輸出為可直接執行的 GRANT 語句,便於遷移/審計。
GRANT <privileges> ON <object> TO '<user>'@'<host>'
[IDENTIFIED BY '<password>']
[WITH GRANT OPTION];
| 類別 | 權限 | 說明 |
|---|---|---|
| 數據庫/表/列級 | SELECT | 查詢表數據 |
| INSERT | 插入數據 | |
| UPDATE | 修改數據 | |
| DELETE | 刪除數據 | |
| CREATE | 創建庫/表 | |
| DROP | 刪除庫/表 | |
| INDEX | 創建/刪除索引 | |
| ALTER | 修改表結構 | |
| 全局管理級 | FILE | 服務器文件讀寫 |
| PROCESS | 查看/殺死其他線程 | |
| RELOAD | 刷新權限表、日志等 | |
| SHUTDOWN | 關閉服務器 | |
| 特殊 | ALL PRIVILEGES | 除 GRANT OPTION 外所有權限 |
| USAGE | 僅允許連接,無任何操作權限 |
*.*:所有庫所有表(全局)。db.*:指定庫所有表。db.tbl:指定庫指定表。db.tbl(col1, col2):列級權限(僅支持 SELECT/INSERT/UPDATE/REFERENCES)。'user'@'host':用戶名 + 主機名/IP。% 通配符:'user'@'%' 允許任意主機;'user'@'192.168.1.%' 限制網段。IDENTIFIED BY 'pwd':創建用戶或修改密碼(會覆蓋原密碼)。WITH GRANT OPTION:允許用戶將自己擁有的權限授予他人,**慎用**,可能導致權限傳遞失控。GRANT ALL ON db.*
TO 'dbmanager'@'server.host.net'
IDENTIFIED BY 'managedb'
WITH GRANT OPTION;
GRANT USAGE ON *.*
TO 'dbmanager'@'server.host.net'
IDENTIFIED BY 'funkychicken';
-- 庫級只讀
GRANT SELECT ON db.*
TO 'jessica'@'%.host.net'
IDENTIFIED BY 'jessrules';
-- 表級特定列可寫
GRANT UPDATE (name, email) ON db.Users
TO 'jessica'@'%.host.net';
REVOKE:撤銷權限,語法同 GRANT。DROP USER 'user'@'host':刪除用戶(5.0.2+)。SET PASSWORD FOR 'user'@'host' = PASSWORD('newpwd'):修改密碼。FLUSH PRIVILEGES:直接操作 grant 表後需刷新生效(GRANT 通常自動刷新)。'user'@'%',限制應用服務器 IP 段。SELECT * FROM mysql.user、SHOW GRANTS 定期巡檢。