Windows 環境下 MySQL 默認以 SYSTEM/Administrator 權限運行,一旦被攻破(SQL 注入、UDF 提權、文件讀寫漏洞),攻擊者即獲得系統最高控制權。通過**專用低權限服務賬號 + NTFS 精確授權 + 服務配置加固**,將損害半徑壓縮到最小。
MysqlSvc(避免默認 mysql、admin 等易猜名稱)D:\Hosting\
├── System\
│ └── MySQL\ # MySQL 程序安裝目錄 (bin、lib、share 等)
│ └── tmpdir\ # 臨時文件目錄 (tmpdir 參數指向此處)
└── MySQLDB\ # 數據目錄 (datadir 參數指向此處)
原則:禁用繼承,顯式添加 MysqlSvc 僅需權限,移除 Users/Everyone/Authenticated Users 等預設組。
| 目錄 | MysqlSvc 權限 | 說明 |
|---|---|---|
D:\Hosting\System\MySQL\ | 讀取和執行、列出文件夾內容、讀取 | 運行二進制、讀取庫文件、啟動腳本 |
D:\Hosting\System\MySQL\tmpdir\ | 修改、讀取和執行、列出文件夾內容、讀取、寫入 | 創建/讀寫/刪除臨時表文件、排序文件 |
D:\Hosting\MySQLDB\ | 修改、讀取和執行、列出文件夾內容、讀取、寫入 | 數據文件(.ibd/.frm/.MYD/.MYI)、日志、socket 文件全生命周期管理 |
高級權限細節(右鍵屬性 → 安全 → 高級 → 編輯):
DROP TABLE、TRUNCATEservices.msc → 找到 MySQL 服務 → 右鍵屬性 → 登錄.\MysqlSvc 及密碼[mysqld]
# 指定臨時目錄(必須為 MysqlSvc 可寫入)
tmpdir = D:/Hosting/System/MySQL/tmpdir
# 數據目錄(安裝向導通常已設)
datadir = D:/Hosting/MySQLDB/
# 安全相關建議
skip_name_resolve = 1 # 禁用 DNS 反解
local_infile = 0 # 禁用 LOAD DATA LOCAL INFILE(防任意文件讀取)
secure_file_priv = '' # 限制 LOAD/SELECT ... INTO OUTFILE 目錄,空值=禁用
symbolic_links = 0 # 禁用符號鏈接(防目錄遍歷)
# 如需導入導出,可設專用目錄:secure_file_priv = D:/Hosting/MySQLDB/Export/
[mysqld]
log_error = D:/Hosting/MySQLDB/error.log
slow_query_log = 1
slow_query_log_file = D:/Hosting/MySQLDB/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
# 审计插件(企業版/ MariaDB / Percona)
# plugin_load_add = audit_log.dll
# audit_log_policy = ALL
MysqlSvc 身份運行(任務管理器 → 詳細信息 → 用戶名)MysqlSvc 登錄桌面 → 應失敗(帳戶已禁用/拒絕互動登錄)Windows 下 MySQL 加固的核心是**將服務進程從「系統神權」降級為「數據管家」**。通過專用賬號、NTFS 精確授權、禁用高危功能、網絡隔離、審計日志,構建纵深防禦體系。此配置可有效緩解 SQL 注入導致的 INTO OUTFILE 寫 Webshell、UDF 提權、任意文件讀取等高危攻擊鏈。建議納入基線模板,所有 Windows MySQL 實例強制執行。