1. 強制 Windows 驗證模式
停用混合模式,僅允許 Windows 整合驗證。利用 AD 群組管理權限,密碼策略由域控制,避免連線字串含明文密碼。
2. 定期稽核空密碼與弱密碼登入
-- 檢查空密碼登入
SELECT name FROM sys.sql_logins WHERE password_hash IS NULL OR password_hash = 0x;
-- 弱密碼檢測工具:SQLPing 3、Nessus、自訂字典攻擊腳本
建立密碼原則:長度 ≥ 12、複雜度、定期輪換、鎖定機制。
3. 嚴格管理伺服器角色與資料庫角色成員
- 定期檢視
sysadmin、securityadmin、db_owner 成員。
- 採用「最小權限原則」:以角色授權,不直接授權個人。
- 清理離職/轉職人員的殘留權限(幽靈帳號)。
4. 物理安全
- 伺服器置於鎖控機房,限制實體存取。
- 備份媒體加密儲存,離場備份保管。
5. 停用不必要的服務與功能
- 停用
xp_cmdshell、OLE Automation、Ad Hoc Distributed Queries 等高風險擴展預存程序。
- 使用
sp_configure 關閉:EXEC sp_configure 'xp_cmdshell', 0; RECONFIGURE;
6. 修補程式與版本管理
- 訂閱 Microsoft Security Bulletin,定期套用 CU/GDR。
- 測試環境先驗證,再推至生產。
7. 加密傳輸與靜態資料
- 強制 TLS 1.2+ 加密連線(
Force Encryption = Yes)。
- 敏感資料欄位使用
Always Encrypted (SQL 2016+) 或 TDE (Transparent Data Encryption) 加密資料檔與備份。
8. 稽核與監控
- 啟用 SQL Server Audit 記錄登入失敗、結構變更、權限異動、敏感資料存取。
- 整合 SIEM (Splunk, Azure Sentinel) 即時告警。
9. 防火牆與網路隔離
- 資料庫伺服器僅開放應用程式伺服器 IP 存取連接埠(1433/自訂)。
- 管理連線(SSMS、RDP)限制跳板機/堡壘機來源 IP。
10. 最小權限服務帳號
- SQL Server 服務、Agent 服務使用專用網域帳號,非 Local System / Network Service。
- 僅授予必要資料夾、註冊表、SPN 權限。
11. 防止 SQL 注入
- 應用程式強制使用參數化查詢 / 預存程序。
- WAF 規則攔截可疑載荷。
12. 備份加密與離站儲存
BACKUP DATABASE ... WITH ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = ...)
- 備份檔案異地儲存,定期測試還原。
13. 資料遮罩與分類
- 動態資料遮罩 (Dynamic Data Masking) 保護非生產環境/支援人員查看敏感欄位。
- 資料探索與分類標記敏感資料,配合稽核策略。
14. 限制錯誤訊息洩露
- 應用程式捕獲例外,回傳通用錯誤代碼,不直接顯示 SQL 錯誤細節。
15. 定期滲透測試與弱點掃描
16. 文件化與事件應變計畫
- 維護安全設定基準文件、權限矩陣、事件應變手冊(偵測、遏制、根除、恢復、事後複盤)。
結語
安全性非一次性設定,而是持續的流程:評估 → 防護 → 偵測 → 回應 → 恢復。將這 16 項準則納入例行維運清單,建立自動化稽核腳本,才能有效降低資料外洩與服務中斷風險。