MySQL 用戶管理是 DBA 日常高頻操作。本文記錄 root 密碼修改、創建用戶授權模板(唯讀、讀寫、開發、超管)、本地與遠程訪問控制、密碼清空、常用客戶端工具連接參數,供快速參考。
# 進入 MySQL bin 目錄
cd /usr/local/mysql/bin
# 或 Windows: E:\wamp\bin\mysql\mysql5.1.36\bin
# 修改密碼為 new_pass
mysqladmin -u root -p password new_pass
# 提示輸入舊密碼,回車確認
mysql -u root -p
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_pass');
-- 或 5.7.6+
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_pass';
FLUSH PRIVILEGES;
語法:GRANT 權限 ON 數據庫.表 TO '用戶'@'主機' IDENTIFIED BY '密碼';
-- 僅本地訪問
GRANT SELECT ON mydb.* TO 'readonly'@'localhost' IDENTIFIED BY 'ro_pass';
-- 允許特定網段遠程
GRANT SELECT ON mydb.* TO 'readonly'@'10.0.1.%' IDENTIFIED BY 'ro_pass';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'10.0.2.%' IDENTIFIED BY 'app_strong_pass';
-- 無 DDL、無 DROP、無 GRANT、無管理權限
GRANT SELECT, INSERT, UPDATE, DELETE,
CREATE, DROP, ALTER, INDEX,
CREATE VIEW, SHOW VIEW,
CREATE ROUTINE, ALTER ROUTINE, EXECUTE
ON dev_db.* TO 'dev'@'192.168.1.%' IDENTIFIED BY 'dev_pass';
GRANT ALL PRIVILEGES ON *.* TO 'dba'@'localhost' IDENTIFIED BY 'super_strong_pass' WITH GRANT OPTION;
-- 僅限 localhost,禁止遠程 root
-- 危險:允許任意主機、全庫權限
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'test1'@'%' IDENTIFIED BY 'abc';
-- 風險:密碼洩露 = 全庫洩露/破壞
-- 修正:限制主機、限制庫
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'test2'@'localhost' IDENTIFIED BY 'abc';
GRANT SELECT ON mydb.* TO 'test2'@'localhost' IDENTIFIED BY '';
-- 或
SET PASSWORD FOR 'test2'@'localhost' = PASSWORD('');
DROP USER 'old_user'@'%';
-- 或
DELETE FROM mysql.user WHERE User='old_user' AND Host='%';
FLUSH PRIVILEGES;
| 工具 | 關鍵參數 |
|---|---|
| mysql 命令行 | -u user -p -h host -P port -S socket |
| Navicat / Workbench | Host, Port, Username, Password, Database (可選) |
| JDBC URL | jdbc:mysql://host:port/db?user=...&password=...&useSSL=false&serverTimezone=UTC |
GRANT 修改內存權限快取,**新連線自動生效**FLUSH PRIVILEGESmysql.user 表後**必須** FLUSH PRIVILEGES用戶管理核心原則:最小權限、IP 白名單、強密碼、定期審計、分環境分帳號。養成用 GRANT 而非直接改表的習慣,避免忘記 FLUSH PRIVILEGES 導致配置不生效。