首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 密碼修改與存取控制(ACL)完整實務指南

     編輯:MySQL 資料庫相關知識

密碼修改六大方法

方法指令範例需 FLUSH PRIVILEGES適用場景
1. mysqladminmysqladmin -u root -p'old' password 'new'否命令列快速改密
2. SET PASSWORDSET PASSWORD FOR 'user'@'host' = PASSWORD('new');否SQL 介面、腳本自動化
3. GRANT ... IDENTIFIED BYGRANT 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 介面圖形化「權限」分頁修改自動視覺化管理

MySQL 4.1+ 密碼雜湊相容性

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 權限分四層,由高到低:

  1. 全域:mysql.user 表,GRANT ALL ON *.*
  2. 資料庫:mysql.db、mysql.host,GRANT ALL ON db.*
  3. 資料表:mysql.tables_priv,GRANT SELECT ON db.tbl
  4. 欄位:mysql.columns_priv,GRANT SELECT (col) ON db.tbl

檢查順序:全域 → 資料庫 → 資料表 → 欄位,任一層滿足即允許。

user 表關鍵權限欄位(3.22/3.23 版本 14 欄)

權限欄位說明風險等級
SELECTSelect_priv查詢資料低
INSERTInsert_priv新增資料低
UPDATEUpdate_priv修改資料中
DELETEDelete_priv刪除資料高
CREATECreate_priv建庫/建表/建索引高
DROPDrop_priv刪庫/刪表極高
RELOADReload_privFLUSH 操作管理
SHUTDOWNShutdown_priv關閉服務極高
PROCESSProcess_privSHOW PROCESSLIST資安
FILEFile_privLOAD DATA INFILE / SELECT INTO OUTFILE極高
GRANTGrant_priv授權給他人極高
REFERENCESReferences_priv外鍵參照(未實作)-
INDEXIndex_priv建/刪索引中
ALTERAlter_privALTER 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

常見安全配置清單

  • root 僅允許 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 同步記憶體權限快取
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved