MySQL 以資料庫為目錄,表對應三個檔案:
.frm:表結構定義(所有引擎)。.ibd (InnoDB 獨立表空間) / .MYD (MyISAM 資料) / .MYI (MyISAM 索引)。預設資料目錄:/var/lib/mysql (Linux)、C:\ProgramData\MySQL\MySQL Server 8.0\Data (Windows)。
| 對象 | 擁有者 | 權限 | 指令 |
|---|---|---|---|
| 資料目錄及所有子項 | mysql:mysql | 700 (drwx------) | chown -R mysql:mysql /var/lib/mysql && chmod -R 700 /var/lib/mysql |
| 錯誤日誌、慢查詢日誌 | mysql:mysql | 640 (-rw-r-----) | chmod 640 /var/log/mysql/*.log |
| 設定檔 | root:root | 644 | chmod 644 /etc/my.cnf |
原則:只有啟動 MySQL 的 OS 用戶(通常是 mysql)能讀寫資料檔,防止本地用戶直接複製檔案竊取資料(繞過 SQL 權限)。
升級舊實例時務必檢查並修正權限。
require_secure_transport=ON,所有連線必須 TLS。audit_log 記錄所有 DDL/DML/登入事件。local_infile=OFF 防止 LOAD DATA LOCAL 任意讀取客戶端檔案。secure_file_priv 限制 SELECT ... INTO OUTFILE 目錄。#!/bin/bash
DATADIR="/var/lib/mysql"
echo "=== 檢查擁有者 ==="
find "$DATADIR" ! -user mysql -ls
echo "=== 檢查權限過寬 ==="
find "$DATADIR" -type d ! -perm 700 -ls
find "$DATADIR" -type f ! -perm 600 -ls
echo "=== 完成 ==="
將安全性內化為基礎設施代碼(Ansible/Terraform),實現持續合規。