Windows 環境下通過命令行管理 MySQL 用戶是運維基本功。本文提供標準化操作流程,適用於 MySQL 5.7+ / 8.0 版本,涵蓋創建、授權、刪除、密碼修改四大核心場景。
cd C:\Program Files\MySQL\MySQL Server 8.0\binmysql -u root -pmysql> CREATE USER 'phplamp'@'localhost' IDENTIFIED BY '1234';
Query OK, 0 rows affected
mysql> INSERT INTO mysql.user (Host, User, authentication_string)
-> VALUES ('localhost', 'phplamp', PASSWORD('1234'));
mysql> FLUSH PRIVILEGES;
MySQL 8.0 移除 PASSWORD() 函數,改用 caching_sha2_password 插件,直接操作 user 表極易導致無法登錄。統一使用 CREATE USER。
mysql> EXIT;
C:\> mysql -u phplamp -p
Enter password: 1234
mysql> -- 登錄成功
GRANT 權限列表 ON 數據庫.表 TO '用戶'@'主機' [IDENTIFIED BY '密碼'] [WITH GRANT OPTION];
| 場景 | 命令 |
|---|---|
| 全庫全表所有權限 (超級管理員) | GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; |
| 指定庫所有權限 | GRANT ALL PRIVILEGES ON mydb.* TO 'dev'@'%'; |
| 指定表讀寫權限 | GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.orders TO 'app'@'%'; |
| 只讀權限 | GRANT SELECT ON mydb.* TO 'readonly'@'%'; |
| 僅執行存儲過程 | GRANT EXECUTE ON mydb.* TO 'proc_user'@'%'; |
| 遠程 IP 限制 | GRANT ALL ON mydb.* TO 'user'@'192.168.1.%'; |
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'phplamp'@'localhost';
SHOW GRANTS; -- 當前用戶
-- 1. 登錄 root
mysql -u root -p
-- 2. 刪除用戶 (8.0+ 推薦)
DROP USER 'phplamp'@'localhost';
-- 3. 刪除用戶專屬數據庫 (可選)
DROP DATABASE phplampDB;
-- 4. 刷新權限
FLUSH PRIVILEGES;
-- 直接操作 mysql.user 表 (8.0 不兼容,易損壞權限系統)
DELETE FROM mysql.user WHERE User='phplamp' AND Host='localhost';
-- 方法 1: ALTER USER (需當前用戶有權限或 root)
ALTER USER 'phplamp'@'localhost' IDENTIFIED BY 'new_password';
-- 方法 2: SET PASSWORD (當前登錄用戶修改自己密碼)
SET PASSWORD = 'new_password';
-- 方法 3: mysqladmin (命令行直接修改,無需進入 mysql>)
mysqladmin -u phplamp -p'old_pass' password 'new_pass'
SET PASSWORD FOR 'phplamp'@'localhost' = PASSWORD('new_password');
-- 或
UPDATE mysql.user SET authentication_string = PASSWORD('new_password')
WHERE User='phplamp' AND Host='localhost';
FLUSH PRIVILEGES;
| 問題 | 原因 | 解決 |
|---|---|---|
| Access denied for user 'root'@'localhost' | 密碼錯誤/權限不足 | 確認密碼、跳過授權表啟動重置 |
| Plugin caching_sha2_password could not be loaded | 客戶端版本過低不支持 8.0 默認插件 | 升級客戶端或改用 mysql_native_password: ALTER USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'; |
| Host 'x.x.x.x' is not allowed to connect | 用戶 Host 不匹配 | 創建 '%' 主機用戶或具體 IP:CREATE USER 'u'@'%' ... |
| FLUSH PRIVILEGES 報錯 | 權限表損壞 | 檢查 mysql.user 表完整性,必要時 mysql_upgrade |
□ 原則:最小權限 — 僅授業務必需權限
□ 原則:按環境隔離 — dev/test/prod 使用不同用戶
□ 原則:禁止 root 遠程登錄 — bind-address=127.0.0.1 或創建專用運維用戶
□ 原則:強密碼策略 — 12+ 位、大小寫、數字、特殊字符
□ 原則:定期輪換 — 核心賬號 90 天輪換
□ 原則:審計日志 — 開啟 general_log 或 audit 插件記錄敏感操作
Windows 下 MySQL 用戶管理核心四步:CREATE USER → GRANT → FLUSH PRIVILEGES → 驗證登錄。MySQL 8.0 強制使用 caching_sha2_password,請拋棄舊式 INSERT INTO mysql.user 和 PASSWORD() 寫法。授權遵循最小權限,定期審計輪換。