| 層級 | 權限表 | ON 語法 | 典型權限 |
|---|---|---|---|
| 全局 | user | ON *.* | SHUTDOWN, SUPER, RELOAD, CREATE USER |
| 資料庫 | db | ON db.* | CREATE, DROP, INDEX, ALTER |
| 資料表 | tables_priv | ON db.tbl | SELECT, INSERT, UPDATE, DELETE |
| 欄位 | columns_priv | ON db.tbl (col) | SELECT, INSERT, UPDATE |
host 表不受 GRANT/REVOKE 控制,需手動維護。
-- 基礎授權
GRANT SELECT, INSERT ON db.* TO 'app'@'10.0.0.%' IDENTIFIED BY 'pass';
-- 全權限含授權權
GRANT ALL ON db.* TO 'admin'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;
-- 僅修改密碼/資源/SSL(USAGE = 無實質權限)
GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'newpass';
GRANT USAGE ON *.* TO 'user'@'%' REQUIRE SSL;
GRANT USAGE ON *.* TO 'user'@'%' WITH MAX_CONNECTIONS_PER_HOUR 100 MAX_QUERIES_PER_HOUR 1000;
%:任意主機(等同無主機部分)。_:單字元通配。192.168.10.%。-- 撤銷特定權限
REVOKE SELECT ON db.* FROM 'app'@'10.0.0.%';
-- REVOKE 不刪除帳號記錄,需手動清理
DELETE FROM mysql.user WHERE User='app' AND Host='10.0.0.%';
FLUSH PRIVILEGES;
注意:REQUIRE SSL、資源限制需用 GRANT USAGE ... REQUIRE NONE、WITH MAX_... 0 重置,REVOKE 無法清除。
FLUSH PRIVILEGES 強制重讀。--skip-grant-tables 啟動時忽略權限表(緊急重置 root 密碼用)。SELECT User, Host, Db FROM mysql.db WHERE Db LIKE 'prod%';validate_password 插件強制策略。