MySQL 權限系統基於 Grant 表,支援細粒度的庫、表、欄位級授權。本文整理常用授權、改密、撤銷、刪除用戶的標準語法與最佳實踐。
GRANT privileges ON db_name.tbl_name TO 'user'@'host' [IDENTIFIED BY 'pass'] [WITH GRANT OPTION];
privileges:SELECT, INSERT, UPDATE, DELETE 等,或 ALL PRIVILEGES。db_name.tbl_name:*.* 表示所有庫所有表。WITH GRANT OPTION:允許該用戶再授權給他人。-- 超級管理員(僅本機) GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'secret' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'secret' WITH GRANT OPTION; -- 僅 RELOAD、PROCESS 權限 GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost'; -- 僅登入權限(USAGE = 無實質權限) GRANT USAGE ON *.* TO 'dummy'@'localhost';
-- 指定用戶
SET PASSWORD FOR 'pig'@'%' = PASSWORD('123456');
-- 當前登入用戶
SET PASSWORD = PASSWORD('newpass');
MySQL 5.7.6+ 建議使用 ALTER USER 'user'@'host' IDENTIFIED BY 'newpass';
REVOKE privileges ON db_name.tbl_name FROM 'user'@'host';
REVOKE 不會刪除用戶帳號,mysql.user 記錄保留,用戶仍可連線(但無任何權限)。DELETE FROM mysql.user WHERE User='user_name' AND Host='host_name'; FLUSH PRIVILEGES;
或 MySQL 5.7.6+:DROP USER 'user'@'host';
GRANT/REVOKE 執行後自動 FLUSH PRIVILEGES。mysql.user/db/tables_priv/columns_priv/procs_priv 表後,必須手動執行 FLUSH PRIVILEGES。SELECT User, Host, authentication_string FROM mysql.user; 檢查空密碼、過期帳號。validate_password 插件強制複雜度、過期輪換。