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

MySQL資料庫安全性深度解析:從連線加密到目錄權限防護

     編輯:MySQL 資料庫相關知識

MySQL資料庫安全性核心議題

資料庫系統的安全性涵蓋多個層面,特別是當資料庫伺服器允許客戶端透過網路連線時,客戶端連線的安全性直接影響MySQL整體防護能力。本文將系統性探討密碼管理、連線加密、服務帳號權限、資料目錄保護及關鍵啟動參數等核心安全議題。

避免在命令列直接輸入密碼

使用mysql、mysqladmin等客戶端工具連線MySQL伺服器時,需提供密碼。雖然可在命令列直接帶入密碼(如mysql -u root -pmypass),但這極度危險:在Unix系統下執行ps -aux | grep mysql,或在Windows開啟工作管理員,皆可在進程列表中明文看到密碼。

正確做法:僅使用-p參數讓客戶端提示輸入密碼(mysql -u root -p),或透過選項檔案僅指定password選項而不存儲實際密碼,由客戶端互動式輸入。

善用SSH建立加密連線通道

為防止網路傳輸被竊聽,建議使用SSH隧道加密客戶端與遠端MySQL伺服器的連線。操作步驟:

  1. 在Windows安裝SSH客戶端(如PuTTY或OpenSSH)
  2. 設定SSH連線:主機名為MySQL伺服器IP,使用者帳號為伺服器登入帳號
  3. 配置本地端口轉發:Local port 3306 → Remote host: localhost, Remote port: 3306
  4. 儲存設定並建立SSH連線
  5. 啟動ODBC應用程式(如Access),連線MySQL時伺服器填寫localhost

此方式將MySQL流量封裝在SSH加密通道中,有效防禦中間人攻擊與流量嗅探。

禁止以Root身分執行MySQL守護進程

切勿以Unix root使用者身分運行mysqld。MySQL可由任何使用者啟動,建議建立專用mysql系統帳號。此舉不影響MySQL內部root帳號(MySQL用戶名與系統用戶名無關)。可修改mysql.server啟動腳本或使用選項檔案指定非root用戶啟動。

資料庫目錄權限管控策略

MySQL透過mysql資料庫授權表實現靈活權限系統,但若伺服器主機其他使用者擁有資料目錄直接存取權,資料仍面臨風險。核心原則:僅允許運行mysqld的專用帳號擁有資料目錄讀寫權限。

潛在安全漏洞分析

  • 日誌檔案洩露:GRANT、SET PASSWORD等語句會記錄至一般/更新日誌,攻擊者若具日誌讀取權,可搜尋GRANT或PASSWORD關鍵字獲取明文密碼
  • 表檔案竊取:攻擊者複製.MYD、.MYI、.frm檔案至另一MySQL實例即可輕易讀取資料

Unix/Linux目錄權限設定

# 切換root
su
# 設定擁有者為mysql:root(遞迴)
chown -R mysql:root DATADIR
# 僅擁有者可讀寫執行
chmod -R go-rwx DATADIR

Windows NT系統權限設定

需平衡服務自動啟動與安全性:資料目錄授予Administrators群組讀寫權(支援服務啟動),同時授予SYSTEM帳號讀寫權(確保網路連線正常)。建議生產環境優先部署Linux以獲更佳安全性與授權彈性。

影響安全性的關鍵mysqld啟動參數

參數安全影響
--secure(--skip-name-resolve反義)驗證IP反向解析一致性,防止主機偽裝;MySQL 3.22+預設啟用並快取主機名
--skip-grant-tables極度危險:完全繞過權限系統,所有人擁有所有資料庫完全存取權
--skip-name-resolve停用主機名解析,授權表Host欄僅接受IP或localhost
--skip-networking禁用TCP/IP連線,僅允許Unix Socket連線(不適用MIT-pthreads系統)

生產環境建議:啟用--secure、避免--skip-grant-tables、視網路架構決定是否啟用--skip-networking。

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