SQL Server 2000 內建多支擴充預存程序(Extended Stored Procedures,xp_*)提供作業系統層級存取(檔案、登錄、命令執行、COM 物件等)。若資料庫帳號遭駭或 SQL 注入,攻擊者可透過這些 xp 取得作業系統控制權,風險極高。微軟建議最小權限原則:不需要即移除。
USE master;
GO
-- 命令執行類
EXEC sp_dropextendedproc 'xp_cmdshell';
EXEC sp_dropextendedproc 'xp_dirtree';
-- 登錄存取類
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';
-- 群組/帳號枚舉
EXEC sp_dropextendedproc 'xp_enumgroups';
EXEC sp_dropextendedproc 'xp_loginconfig';
-- 錯誤日誌/磁碟/檔案細節
EXEC sp_dropextendedproc 'xp_enumerrorlogs';
EXEC sp_dropextendedproc 'xp_fixeddrives';
EXEC sp_dropextendedproc 'xp_getfiledetails';
-- OLE Automation 物件操作(極高風險)
EXEC sp_dropextendedproc 'sp_OACreate';
EXEC sp_dropextendedproc 'sp_OADestroy';
EXEC sp_dropextendedproc 'sp_OAGetErrorInfo';
EXEC sp_dropextendedproc 'sp_OAGetProperty';
EXEC sp_dropextendedproc 'sp_OAMethod';
EXEC sp_dropextendedproc 'sp_OASetProperty';
EXEC sp_dropextendedproc 'sp_OAStop';
-- Web 任務(舊版)
DROP PROCEDURE sp_makewebtask;
GO
| 原功能 | 建議替代方案 |
|---|---|
| xp_cmdshell | SQL Agent 作業步驟 (CmdExec)、SSIS 執行封裝、CLR 預存程序(簽署憑證) |
| xp_dirtree / xp_getfiledetails | CLR 檔案系統操作、PowerShell + Agent |
| sp_OA* | CLR 組件呼叫 .NET Framework、Service Broker 外部啟動器 |
| xp_reg* | 原則管理、CLR 登錄存取、應用層配置表 |
| sp_makewebtask | Reporting Services、SSIS 輸出 HTML、應用層產生 |