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

MySQL 安全性指南(一):內部文件系統與外部網絡雙重防護體系

     編輯:MySQL 資料庫相關知識

MySQL 安全分為內部(文件系統級)與外部(網絡授權表)兩大維度。本文從數據目錄權限鎖定、日志文件保護、防範本地用戶竊取數據文件,到授權表結構、權限分類、連接驗證流程,構建完整的雙層防護指南。

一、內部安全:數據目錄與日志鐵桶化

1. 風險場景

  • 本地用戶讀取數據文件(.MYD/.MYI/.frm) → 拷貝到自建 MySQL 實例 → 以 root 身份完全訪問數據。
  • 日志文件(通用/更新/錯誤日志)記錄 GRANT、SET PASSWORD 明文密碼,grep 即可洩露。

2. 權限配置標準(以 mysql 用戶運行為例)

drwx------ 4 mysql mysql 4096 var/          # 數據目錄 700
drwx------ 2 mysql mysql 4096 var/mysql/    # 系統庫 700
-rw------- 1 mysql mysql 9148 var/mysql/user.frm
... 所有文件 600

修正命令:

chown -R mysql.mysql /usr/local/mysql/var
chmod -R go-rwx /usr/local/mysql/var

3. 禁止 root 啟動 mysqld

3.23.15+ 預設強制非 root 啟動。若 root 運行,LOAD DATA INFILE/SELECT ... INTO OUTFILE 將獲得 root 文件系統權限。雖有限制(不可覆蓋現有文件、僅讀全局可讀文件),但風險極大。

4. 日志文件防洩露

# 禁用 shell 歷史記錄密碼
rm .bash_history .mysql_history
ln -s /dev/null .bash_history
ln -s /dev/null .mysql_history

備份/登錄時勿在命令行帶密碼(-p 後留空,交互輸入)。

二、外部安全:授權表架構與訪問控制

1. 五大授權表

表用途範圍列權限列
user全局用戶與超級權限Host, User, PasswordSelect_priv...Shutdown_priv (17個)
db資料庫級權限Host, Db, UserSelect_priv...Grant_priv (8個)
host輔助 db 限制主機訪問Host, Db同 db
tables_priv表級權限Host, Db, User, Table_nameTable_priv (SET)
columns_priv列級權限Host, Db, User, Table_name, Column_nameColumn_priv (SET)

tables_priv/columns_priv 於 3.22.11 引入,舊版升級需執行 mysql_fix_privileges_tables。

2. 權限分類速查

  • 數據操作:SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER、REFERENCES(保留)
  • 管理操作:FILE、GRANT、PROCESS、RELOAD、SHUTDOWN

3. 連接驗證兩階段

  1. 匹配 user 表 Host、User、Password → 失敗拒絕
  2. 查詢階段按 user → db → tables_priv → columns_priv 疊加權限,任一滿足即執行

4. 範圍列通配符與排序

  • Host:主機名/IP/%/_/CIDR
  • User:空值=匿名,% 為字面值
  • 排序:Host 具體度優先 → User 具體度優先

三、管理建議

  1. 文件系統層面:專用用戶運行、目錄 700/文件 600、日志導向 /dev/null。
  2. 網絡層面:刪除匿名用戶、強 root 密碼、最小權限原則、禁用 FILE/GRANT、定期 FLUSH PRIVILEGES。
  3. 升級至支援 GRANT/REVOKE 版本(≥3.22.11),避免手動操作授權表風險。

內外兼修,方能構建可信的 MySQL 安全基線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved