資料庫安全非單點防護,需構建 **OS → 網路 → 實例 → 資料庫 → 應用** 五層防線。本文聚焦 SQL Server 2000 實例與資料庫層面配置。
https://www.microsoft.com/download/details.aspx?id=8845 (歷史封存)。
-- 稽核空密碼/弱密碼登入 (SQL 2000 相容)
SELECT name FROM master..syslogins WHERE password IS NULL OR pwdcompare('', password) = 1;
-- 注意:SQL 2000 密碼雜湊為未公開演算法,無法直接驗證複雜度,建議強制輪換。
| 策略 | 實作 | 效益 |
|---|---|---|
| 專用管理帳號 | 建立 sql_admin (sysadmin)、sql_operator (serveradmin/setupadmin),**禁用 sa 日常使用**,僅緊急修復啟用。 | 審計追蹤、責任分離、減少 sa 暴露。 |
| 移除 BUILTIN\Administrators | EXEC sp_droplogin 'BUILTIN\Administrators'; (需先確保有其他 sysadmin 可登入)。 | 防止 OS 管理員直接具備 SQL 最高權限。 |
| 應用帳號最小權限 | 唯讀應用 → db_datareader;寫入應用 → 自訂角色 GRANT INSERT, UPDATE, DELETE ON Schema::Sales TO App_Write。 | 限制損害範圍、符合最小權限原則。 |
| Windows 整合驗證優先 | 網域環境啟用 僅 Windows 驗證模式,利用 Kerberos/NTLM、群組管理、密碼策略集中化。 | 免管理 SQL 密碼、單一身分來源、支援委派。 |
findstr /C:"Login failed" "C:\Program Files\Microsoft SQL Server\MSSQL\LOG\ERRORLOG*"
findstr /C:"登入失敗" "C:\Program Files\Microsoft SQL Server\MSSQL\LOG\ERRORLOG*"
原則:預設拒絕,按需啟用。以下高風險程序**建議移除** (生產環境極少合理用途):
-- 1. 命令執行 (極高風險)
EXEC sp_dropextendedproc 'xp_cmdshell';
-- 還原: EXEC sp_addextendedproc 'xp_cmdshell', 'xpstar.dll'; (SQL 2000) / 'xplog70.dll' (SQL 7.0)
-- 2. OLE 自動化 (COM 物件存取,歷史漏洞溫床)
EXEC sp_dropextendedproc 'sp_OACreate';
EXEC sp_dropextendedproc 'sp_OAMethod';
EXEC sp_dropextendedproc 'sp_OAGetProperty';
EXEC sp_dropextendedproc 'sp_OASetProperty';
EXEC sp_dropextendedproc 'sp_OADestroy';
EXEC sp_dropextendedproc 'sp_OAGetErrorInfo';
EXEC sp_dropextendedproc 'sp_OAStop';
-- 3. 登錄存取 (可讀取 SAM/機碼)
EXEC sp_dropextendedproc 'xp_regread';
EXEC sp_dropextendedproc 'xp_regwrite';
EXEC sp_dropextendedproc 'xp_regdeletekey';
EXEC sp_dropextendedproc 'xp_regdeletevalue';
EXEC sp_dropextendedproc 'xp_regenumvalues';
EXEC sp_dropextendedproc 'xp_regaddmultistring';
EXEC sp_dropextendedproc 'xp_regremovemultistring';
-- 4. 其他高風險
EXEC sp_dropextendedproc 'xp_availablemedia';
EXEC sp_dropextendedproc 'xp_dirtree';
EXEC sp_dropextendedproc 'xp_enumdsn';
EXEC sp_dropextendedproc 'xp_fileexist';
EXEC sp_dropextendedproc 'xp_fixeddrives';
EXEC sp_dropextendedproc 'xp_getfiledetails';
EXEC sp_dropextendedproc 'xp_readerrorlog';
EXEC sp_dropextendedproc 'xp_terminate_process';
注意:移除前確認無合法業務依賴 (如備份軟體、監控代理、DTS ActiveX 任務)。測試環境驗證後再推生產。
| 項目 | 建議設定 | 指令/路徑 |
|---|---|---|
| 隱藏執行個體 | 命名執行個體 + 非預設埠 (非 1433) + 停用 SQL Browser 服務 | 伺服器網路公用程式 → TCP/IP → 埠號 |
| 停用 SA 重命名 | 無法重命名,但可建立同名低權限登入混淆 (不推薦),核心在強密碼+審計 | -- |
| 限制錯誤訊息 | 追蹤旗標 3625 (僅記錄錯誤碼,不回傳細節給用戶端) | DBCC TRACEON (3625, -1) 或啟動參數 -T3625 |
| 資料庫擁有者 | 所有使用者資料庫 EXEC sp_changedbowner 'sql_admin' | 防止 dbo 權限被普通帳號取得 |
| 公開角色權限 | 撤銷 public 不必要權限:REVOKE SELECT ON sysobjects TO public 等 | 最小化資訊洩露 |
[ ] OS 強化、防火牆、稽核原則完成
[ ] SQL Server 2000 SP4 已套用
[ ] sa 強複雜密碼、定期輪換、非日常使用
[ ] 專用 sysadmin/operator 帳號建立、BUILTIN\Administrators 移除
[ ] 應用帳號最小權限、Windows 整合驗證優先
[ ] 登入審計「成功與失敗」啟用、日誌定期歸檔分析
[ ] xp_cmdshell / sp_OA* / xp_reg* / 其他高風險擴展程序 已移除
[ ] TDS 強制加密 / IPSec 已部署
[ ] 隱藏執行個體、非預設埠、錯誤訊息限制、資料庫擁有者收斂
[ ] 文件化所有配置、變更記錄、定期滲透測試