MySQL 為多用戶、多執行緒的 SQL 伺服器,安全性需從帳號密碼、權限最小化、網路隔離多層面建構。本文彙整密碼修改六大方法與訪問控制要點。
| 方法 | 指令範例 | 需 FLUSH PRIVILEGES | 適用場景 |
|---|---|---|---|
| 1. phpMyAdmin | GUI 操作 user 表 | 視工具而定 | 圖形化管理偏好者 |
| 2. mysqladmin | mysqladmin -u root -p oldpwd newpwd | 否 | 命令列快速修改 |
| 3. INSERT + PASSWORD() | INSERT INTO mysql.user (Host,User,Password) VALUES ('%','user',PASSWORD('pwd')); FLUSH PRIVILEGES; | 是 | 建立新帳號 |
| 4. REPLACE + PASSWORD() | REPLACE INTO mysql.user ... FLUSH PRIVILEGES; | 是 | 覆蓋式建立/更新 |
| 5. SET PASSWORD | SET PASSWORD FOR 'user'@'%' = PASSWORD('pwd'); | 否 | 標準 SQL 介面 |
| 6. GRANT IDENTIFIED BY | GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'pwd'; | 否 | 同時授權與設密 |
關鍵提醒:MySQL 5.7+ 已棄用 PASSWORD(),改用 authentication_string 欄位與 caching_sha2_password 插件,建議直接用 ALTER USER 'user'@'%' IDENTIFIED BY 'pwd';。
'user'@'192.168.1.%'),避免 % 通配SELECT User, Host FROM mysql.user; 檢查殘留帳號validate_password 元件強制長度、混合字元default_password_lifetime 強制定期更換-- 查看用戶權限
SHOW GRANTS FOR 'user'@'host';
-- 授予權限
GRANT SELECT, INSERT ON db.* TO 'user'@'host';
-- 回收權限
REVOKE INSERT ON db.* FROM 'user'@'host';
-- 刪除用戶
DROP USER 'user'@'host';