MySQL 安裝後的第一課:連接、建用戶、授權、刷新、刪除。本文提供標準化命令流,避開「授權不生效」「匿名用戶殘留」等新手坑。
mysql -u root -p
# 輸入密碼進入 mysql> 交互模式
-- 方式一:建用戶 + 密碼 (8.0+)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
-- 方式二:指定主機 (僅允許特定 IP/網段)
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
-- 方式三:舊版 5.7 兼容寫法 (直接插入 mysql.user 表,不推薦)
-- INSERT INTO mysql.user (Host, User, authentication_string) VALUES ('%', 'app_user', PASSWORD('pass'));
Host 字段含義:
%:允許**任意主機**連接 (遠程訪問)。localhost:僅允許**本機 Unix Socket** 連接。127.0.0.1:僅允許**本機 TCP/IP** 連接。192.168.1.%:允許特定網段。-- 全庫全表所有權限 (僅管理員/所有者)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
-- 單庫所有權限 (應用賬號標配)
GRANT ALL PRIVILEGES ON `my_db`.* TO 'app_user'@'%';
-- 精細權限 (唯讀/寫入分離)
GRANT SELECT, INSERT, UPDATE, DELETE ON `my_db`.* TO 'rw_user'@'%';
GRANT SELECT ON `my_db`.* TO 'ro_user'@'%';
-- 特定表/欄位權限
GRANT SELECT (id, name) ON `my_db`.`users` TO 'api_user'@'%';
FLUSH PRIVILEGES;
MySQL 將權限表緩存於內存,**修改後必須執行此命令**讓實例重新讀取權限表。8.0+ 部分場景自動刷新,但手動執行無副作用且保險。
-- 8.0+ 標準語法
DROP USER 'app_user'@'%';
-- 5.7 兼容 (直接刪表記錄)
DELETE FROM mysql.user WHERE User='app_user' AND Host='%';
FLUSH PRIVILEGES;
| 坑點 | 現象 | 解決 |
|---|---|---|
| 授權後連不上 | 忘記 FLUSH PRIVILEGES | 執行 FLUSH PRIVILEGES |
| 遠程連不上 | 用戶 Host 為 localhost/127.0.0.1 | 建立 Host='%' 用戶或修改 Host |
| 匿名用戶安全隱患 | User='' 允許無密碼登入 | mysql_secure_installation 或手動 DELETE FROM mysql.user WHERE User=''; |
| 密碼策略太強報錯 | validate_password 元件拒絕弱密碼 | 降低等級或用強密碼 (大小寫+數字+特殊符號 12位+) |
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'app_user'@'%';
一句話總結: **CREATE USER → GRANT 最小權限 → FLUSH PRIVILEGES → 驗證連接 → 定期審計 DROP 廢棄用戶**,用戶管理零事故。