| 方法 | 指令範例 | 需 FLUSH PRIVILEGES | 適用場景 |
|---|---|---|---|
| 1. mysqladmin | mysqladmin -u root -p'old' password 'new' | 否 | 命令列快速改密 |
| 2. SET PASSWORD | SET PASSWORD FOR 'user'@'host' = PASSWORD('new'); | 否 | SQL 介面、腳本自動化 |
| 3. GRANT ... IDENTIFIED BY | GRANT USAGE ON *.* TO 'user'@'host' IDENTIFIED BY 'new'; | 否 | 同時授權與設密 |
| 4. UPDATE user 表 | UPDATE mysql.user SET Password=PASSWORD('new') WHERE User='user'; FLUSH PRIVILEGES; | 是 | 批量操作、直接控制 |
| 5. INSERT/REPLACE user 表 | REPLACE INTO mysql.user (Host,User,Password) VALUES ('%','u',PASSWORD('p')); FLUSH PRIVILEGES; | 是 | 建立新帳號並設密 |
| 6. PHPMyAdmin 介面 | 圖形化「權限」分頁修改 | 自動 | 視覺化管理 |
4.1 採用 41 位元雜湊,舊客戶端(含舊 PHP mysql 擴展)無法驗證,報錯:
Client does not support authentication protocol
解決:
SET PASSWORD FOR 'root'@'localhost' = OLD_PASSWORD('newpwd');
-- 或 my.cnf 加入
[mysqld]
old_passwords=1
MySQL 權限分四層,由高到低:
mysql.user 表,GRANT ALL ON *.*mysql.db、mysql.host,GRANT ALL ON db.*mysql.tables_priv,GRANT SELECT ON db.tblmysql.columns_priv,GRANT SELECT (col) ON db.tbl檢查順序:全域 → 資料庫 → 資料表 → 欄位,任一層滿足即允許。
| 權限 | 欄位 | 說明 | 風險等級 |
|---|---|---|---|
| SELECT | Select_priv | 查詢資料 | 低 |
| INSERT | Insert_priv | 新增資料 | 低 |
| UPDATE | Update_priv | 修改資料 | 中 |
| DELETE | Delete_priv | 刪除資料 | 高 |
| CREATE | Create_priv | 建庫/建表/建索引 | 高 |
| DROP | Drop_priv | 刪庫/刪表 | 極高 |
| RELOAD | Reload_priv | FLUSH 操作 | 管理 |
| SHUTDOWN | Shutdown_priv | 關閉服務 | 極高 |
| PROCESS | Process_priv | SHOW PROCESSLIST | 資安 |
| FILE | File_priv | LOAD DATA INFILE / SELECT INTO OUTFILE | 極高 |
| GRANT | Grant_priv | 授權給他人 | 極高 |
| REFERENCES | References_priv | 外鍵參照(未實作) | - |
| INDEX | Index_priv | 建/刪索引 | 中 |
| ALTER | Alter_priv | ALTER TABLE | 高 |
-- 僅需讀寫特定資料庫
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'10.0.0.%' IDENTIFIED BY 'strong_random_pwd';
FLUSH PRIVILEGES;
-- 禁止高風險權限:FILE, SHUTDOWN, PROCESS, GRANT, CREATE, DROP
localhost 登入:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';DELETE FROM mysql.user WHERE User='';DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';skip-name-resolve 避免 DNS 延遲與偽造FLUSH PRIVILEGES 同步記憶體權限快取