兩者缺一不可:若文件權限鬆散,網絡授權再嚴格也無濟於事。
GRANT、SET PASSWORD 明文密碼)mysql_install_db 獲得 root 權限SELECT * FROM test.stolen_table 直接讀取# 1. 進入數據目錄
cd /var/lib/mysql # DATADIR
# 2. 統一屬主為運行服務的用戶(需 root)
chown -R mysql:mysql .
# 3. 移除 group/other 所有權限
chmod -R go-rwx .
# 4. 驗證結果
ls -la
# 期望輸出:drwx------ mysql mysql ... database_name
關鍵原則:數據目錄及所有子目錄/文件僅對 mysql 用戶可讀寫執行(700),嚴禁 group/other 任何權限。
| 表名 | 作用範圍 | 受 GRANT/REVOKE 影響 |
|---|---|---|
| user | 全局(超級用戶)權限 | 是 |
| db | 庫級權限 | 是 |
| host | 主機級精細控制(配合 db) | 否 |
| tables_priv | 表級權限 | 是 |
| columns_priv | 列級權限 | 是 |
僅存在於 user 表:File_priv、Process_priv、Reload_priv、Shutdown_priv。這些權限與特定庫/表無關,屬服務器級操作。
user 表 → 失敗拒絕,成功進入階段二user → db → tables_priv → columns_priv,權限以 OR 邏輯疊加user OR (db AND host) OR tables_priv OR columns_priv服務啟動時將授權表載入記憶體,直接修改表不生效,需 FLUSH PRIVILEGES。
% _/CIDR(192.168.0.0/16),% = 所有主機% 為字面值mysql 庫任何權限(等同全局 GRANT)FILE、SHUTDOWN、PROCESS、GRANTdb/tables_priv/columns_priv 獲取權限,user 表保留 root 等極少數管理員--skip-show-database 限制 SHOW DATABASES 可見範圍MySQL 安全防線:文件系統 700 權限鎖死數據目錄 + 授權表最小權限分配 + 禁用高危全局權限 + 定期 FLUSH PRIVILEGES 同步記憶體。內外兼修,方能構建可信賴的數據庫環境。