MySQL 權限系統是資料庫安全的第一道防線。掌握用戶生命週期管理、分級授權機制、權限轉移控制及資源限制配置,是 DBA 與開發者的必修課。本文系統整理核心操作語法與最佳實踐,附帶實戰場景解析。
-- 建立用戶(指定主機與密碼)
CREATE USER 'mark'@'localhost' IDENTIFIED BY '123456';
-- 刪除用戶
DROP USER 'mark'@'localhost';
-- 重命名用戶
RENAME USER 'mark'@'localhost' TO 'mark1'@'localhost';
-- 修改密碼(5.7+ 建議用 ALTER USER)
SET PASSWORD FOR 'mark'@'localhost' = PASSWORD('111111');
USE mysql;
GRANT SELECT ON user TO 'mark'@'localhost';
支援權限:SELECT、INSERT、DELETE、UPDATE、REFERENCES、CREATE、ALTER、INDEX、DROP、ALL/ALL PRIVILEGES
GRANT SELECT ON mysql.* TO 'mark'@'localhost';
擴展權限:CREATE TEMPORARY TABLES、CREATE VIEW、SHOW VIEW、CREATE/ALTER/EXECUTE ROUTINE、LOCK TABLES 等
GRANT CREATE USER ON *.* TO 'mark'@'localhost';
GRANT CREATE, ALTER, DROP ON *.* TO 'mark'@'localhost';
WITH GRANT OPTION 允許受授權用戶將自身權限再授予他人:
GRANT SELECT ON mysql.user TO 'mark'@'localhost' WITH GRANT OPTION;
資源限制子句 可防範濫用:
MAX_QUERIES_PER_HOUR 1:每小時查詢上限MAX_CONNECTIONS_PER_HOUR 1:每小時連線上限MAX_UPDATES_PER_HOUR 1:每小時更新上限MAX_USER_CONNECTIONS 1:同步連線上限
GRANT SELECT ON mysql.user TO 'mark'@'localhost' WITH MAX_QUERIES_PER_HOUR 1;
REVOKE SELECT ON mysql.user FROM 'mark'@'localhost';
最佳實踐建議: 遵循最小權限原則,定期審計 mysql.user、mysql.db、mysql.tables_priv 等權限表;生產環境嚴禁使用 root@%,生產帳號需綁定具體 IP,並啟用 SSL 加密傳輸。