登入 MySQL 基礎
# 進入安裝目錄
cd "C:\Program Files\MySQL\MySQL Server 5.6\bin"
# 用戶登入
mysql -h localhost -u abc -pabc
# -h: 主機名,localhost 為本機
# -u: 用戶名
# -p: 密碼(無密碼直接 -p 回車)
CREATE USER 創建用戶(推薦,職責單一)
CREATE USER 'li'@'localhost' IDENTIFIED BY 'li';
授權:GRANT
-- 授予 person 庫所有權限,含 GRANT OPTION
GRANT ALL ON person.* TO 'li'@'localhost' WITH GRANT OPTION;
-- 立即生效(5.6+ 修改即時生效,舊版本需 FLUSH PRIVILEGES)
FLUSH PRIVILEGES;
GRANT 隱式創建用戶(舊版本常用)
-- 授予 SELECT、INSERT,同時創建用戶 abc
GRANT SELECT, INSERT ON person.* TO 'abc'@'localhost' IDENTIFIED BY 'abc';
-- 允許 abc 將權限轉授他人
GRANT SELECT, INSERT ON person.* TO 'abc'@'localhost' IDENTIFIED BY 'abc' WITH GRANT OPTION;
權限查看
-- 當前用戶權限
SHOW GRANTS;
-- 指定用戶權限
SHOW GRANTS FOR 'abc'@'localhost';
權限回收:REVOKE
-- 回收 abc 對 person 庫的 INSERT
REVOKE INSERT ON person.* FROM 'abc'@'localhost';
-- 回收 person 庫所有權限
REVOKE ALL ON person.* FROM 'abc'@'localhost';
-- 回收所有庫所有權限(慎用!)
REVOKE ALL ON *.* FROM 'abc'@'localhost';
刪除用戶
-- 5.7+ 直接刪除,無需先回收權限
DROP USER 'abc'@'localhost';
最佳實踐清單
- 最小權限原則:業務賬號僅授予必要庫、必要表、必要操作 (SELECT/INSERT/UPDATE/DELETE)
- 按環境隔離:dev/test/prod 使用完全不同的賬號,密碼複雜度滿足策略
- 禁用 root 遠程登入:
UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;
- 定期審計:
SELECT User, Host FROM mysql.user; 檢查殭屍賬號、過度授權賬號
- 密碼輪換:配合
validate_password 插件強制複雜度,定期 ALTER USER ... IDENTIFIED BY ...
- 審計日誌:開啟
audit_log 記錄所有 DDL/DML/登入操作
常見誤區
| 誤區 | 正確做法 |
| GRANT ALL ON *.* 給應用賬號 | 按庫、按表、按列精細授權 |
| 通配符主機 '%' 滿天飛 | 限制具體 IP 段或主機名 |
| 密碼明文寫在腳本/配置 | 使用密碼管理工具、環境變數、密鑰保管庫 |
| 以為 FLUSH PRIVILEGES 總是必需 | 5.6+ 修改即時生效,僅修改 grant 表直改時需刷新 |