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

MySQL安全性指南(一):內部與外部雙層防禦體系建立全流程

     編輯:MySQL 資料庫相關知識

MySQL管理員須同時建立內部(檔案系統)與外部(網路授權)雙層防禦。本文系統闡述兩大防禦面向的風險資產、具體配置步驟與授權表架構。

第一部:內部安全性 — 保護資料目錄

核心風險資產

  • 資料庫檔案:機密性與專有性,防止因目錄權限不當洩露。
  • 日誌檔案:含完整SQL文本,GRANT/SET PASSWORD以**明文**記錄密碼,grep即可竊取。
  • 表檔案可讀風險:攻擊者可啟動特製MySQL實例,複製目標表檔至test庫,SELECT *讀取全內容,甚至開放匿名帳號公開洩露。

檢測不安全權限

% ls -l DATADIR
drwxrwxr-x  2 mysqladm wheel  512 Jan 25 20:40 mysql   <-- 群組/他人可讀,危險
drwx------  2 mysqladm mysqlgrp 512 May  8 18:43 tmp    <-- 正確

權限修正標準流程(Unix/Linux)

  1. cd DATADIR
  2. 設定擁有者(需root):
    # chown -R mysqladm:mysqlgrp .
    # find . -follow -type d -print | xargs chown mysqladm:mysqlgrp
  3. 移除群組/他人權限:
    % chmod -R go-rwx .
    % find . -follow -type d -print | xargs chmod go-rwx
  4. **永遠以mysqladm身分啟動mysqld**

修正後標準權限

drwx------  2 mysqladm mysqlgrp  512 Jan 25 20:40 mysql
drwx------  2 mysqladm mysqlgrp 1536 May  6 06:11 test
drwx------  2 mysqladm mysqlgrp 1024 May  8 18:43 tmp

第二部:外部安全性 — 網路授權表架構

五大授權表結構

表範圍欄位權限欄位用途
userHost, User, Password全域權限(含管理權限)帳號認證、超級用戶權限
dbHost, Db, User資料庫級權限特定資料庫存取控制
hostHost, Db資料庫級權限輔助db表,主機粒度控制
tables_privHost, Db, User, Table_nameTable_priv (SET)表級權限
columns_privHost, Db, User, Table_name, Column_nameColumn_priv (SET)欄位級權限

tables_priv/columns_priv隨GRANT於3.22.11引入;舊版升級需執行mysql_fix_privilege_tables建立。

授權表運作機制

  • user表:全域權限,適用**所有**資料庫,DELETE_PRIV='Y'即可刪除任意表記錄,**極度謹慎授予**。
  • db表:資料庫級,適用該庫**所有表**。
  • host表:不受GRANT/REVOKE影響,配合db表做AND邏輯,可選擇性禁用特定主機權限。
  • tables_priv:表級,適用該表**所有欄位**。
  • columns_priv:欄位級,最細粒度。

管理建議

  • 優先使用GRANT/REVOKE管理權限(3.22.11+),降低手動操作錯誤。
  • 舊版環境參考指南第三部手動INSERT授權表。
  • 定期稽核user表全域權限、匿名帳號、FILE/PROCESS/GRANT高危權限持有者。
  • 內部檔案權限與外部授權表**雙軌並行**,缺一不可。

建立「檔案系統鎖定資料目錄 + 授權表精準控制網路存取」的雙層防禦,是MySQL安全運維的基石。

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