| 操作 | mysql.user 表 | mysql.db / tables_priv / columns_priv 等權限表 | FLUSH PRIVILEGES |
|---|---|---|---|
DROP USER 'user'@'host'; | 刪除行 | **級聯刪除**所有關聯權限記錄 | 隱式執行 |
DELETE FROM mysql.user WHERE User='user'; | 刪除行 | **不動**權限表,殘留 db/table/column 級權限 | 需手動執行 |
-- 1. 建用戶並授權
GRANT ALL ON test.* TO 'test'@'%' IDENTIFIED BY 'test';
-- 2. 只刪 user 表
DELETE FROM mysql.user WHERE User='test';
FLUSH PRIVILEGES;
-- 3. 檢查 db 表 —— 權限仍在!
SELECT * FROM mysql.db WHERE User='test';
+------+------+------+-------------+...
| Host | Db | User | Select_priv |...
+------+------+------+-------------+...
| % | test | test | Y |...
-- 4. 重建同名低權限用戶
GRANT SELECT ON test.* TO 'test'@'%' IDENTIFIED BY 'test';
-- 發現 db 表權限**未變**,仍為 ALL PRIVILEGES!
MySQL 權限系統為**多表授權模型**,DROP USER 會遍歷所有權限表清理,而 DELETE 只操作單表。
DROP USER** 刪除賬戶。DELETE,必須手動清理:DELETE FROM mysql.db WHERE User='test';
DELETE FROM mysql.tables_priv WHERE User='test';
DELETE FROM mysql.columns_priv WHERE User='test';
DELETE FROM mysql.procs_priv WHERE User='test';
FLUSH PRIVILEGES;
CREATE USER/DROP USER/GRANT/REVOKE。mysql.db 等權限表,排查孤兒權限(User 不在 mysql.user 中)。SHOW CREATE USER 導出定義,版本控制管理。