前置條件
- 擁有 MySQL `root` 賬號或 `CREATE USER`、`GRANT OPTION` 權限。
- 在 CMD (命令提示符) 下操作,phpMyAdmin 同理。
1. 登錄 MySQL
mysql -u root -p
# 輸入 root 密碼
2. 創建用戶
MySQL 5.7+ / 8.0 推薦語法
CREATE USER 'phplamp'@'localhost' IDENTIFIED BY '1234';
-- 或允許遠程
CREATE USER 'phplamp'@'%' IDENTIFIED BY '1234';
MySQL 5.6 及舊版語法 (兼容)
INSERT INTO mysql.user (Host, User, Password)
VALUES ('localhost', 'phplamp', PASSWORD('1234'));
FLUSH PRIVILEGES;
驗證登錄
mysql -u phplamp -p
# 輸入 1234 登錄成功
3. 用戶授權 (GRANT)
常用授權模板
-- 全庫全表所有權限 (慎用)
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
-- 特定庫所有權限 (推薦應用賬號)
GRANT ALL PRIVILEGES ON `app_db`.* TO 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass!';
-- 僅讀賬號 (報表/備份)
GRANT SELECT ON `app_db`.* TO 'readonly'@'192.168.1.%' IDENTIFIED BY 'ReadOnlyPass!';
-- 僅增刷改 (無 DROP/ALTER)
GRANT SELECT, INSERT, UPDATE, DELETE ON `app_db`.* TO 'rw_user'@'%' IDENTIFIED BY 'RWPass!';
-- 刷新生效
FLUSH PRIVILEGES;
權限說明
| 權限 | 含義 |
| ALL PRIVILEGES | 除 GRANT OPTION 外所有權限 |
| SELECT/INSERT/UPDATE/DELETE | 增刪改查 |
| CREATE/DROP/ALTER | 建/刪/改表結構 |
| INDEX | 建/刪索引 |
| GRANT OPTION | 將自己的權限授予他人 |
| FILE | 讀寫服務器文件 (`LOAD_FILE`, `INTO OUTFILE`) **極危險,禁用** |
| SUPER/PROCESS/SHUTDOWN | 管理權限 **嚴禁應用賬號** |
4. 修改用戶密碼
MySQL 5.7+ / 8.0
ALTER USER 'phplamp'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;
MySQL 5.6 / 通用
UPDATE mysql.user SET Password=PASSWORD('new_password')
WHERE User='phplamp' AND Host='localhost';
FLUSH PRIVILEGES;
命令行工具 `mysqladmin` (腳本適用)
mysqladmin -u phplamp -p'old_pass' password 'new_pass'
5. 刪除用戶
-- 5.7+ / 8.0
DROP USER 'phplamp'@'localhost';
-- 5.6 / 通用
DELETE FROM mysql.user WHERE User='phplamp' AND Host='localhost';
FLUSH PRIVILEGES;
-- 同步刪除用戶數據庫 (謹慎)
DROP DATABASE phplampDB;
6. 查看用戶與權限
-- 所有用戶
SELECT User, Host, plugin FROM mysql.user;
-- 特定用戶權限
SHOW GRANTS FOR 'phplamp'@'localhost';
避坑指南
| 問題 | 原因 | 解決 |
| 創建用戶報錯 `Plugin 'mysql_native_password' is not loaded` | 8.0 默認 `caching_sha2_password`,客戶端不支持 | `CREATE USER ... IDENTIFIED WITH mysql_native_password BY 'pass';` |
| 遠程連接 `Access denied` | 用戶 Host 不匹配 (`localhost` vs `%`) | 創建 `%` 用戶或具體 IP 用戶,檢查防火牆 |
| 授權後不生效 | 未執行 `FLUSH PRIVILEGES` | 必須執行 (5.7+ 部分場景自動刷新,但建議手動執行) |
| 密碼含特殊字符 `@#$%` 登錄失敗 | Shell 轉義 | 單引號包裹 `mysql -u user -p'pass@#$%'` 或交互式輸入 |
總結
MySQL 用戶管理核心口訣:**5.7+ 用 `CREATE USER`/`ALTER USER`/`DROP USER`,舊版用 `INSERT/UPDATE/DELETE mysql.user` + `FLUSH PRIVILEGES`**。**最小權限原則**:應用賬號僅授予特定庫 `SELECT/INSERT/UPDATE/DELETE`,禁用 `FILE`、`SUPER`、`GRANT OPTION`。定期 `SHOW GRANTS` 審計權限。