xp_cmdshell 為擴充預存程序,允許在 T-SQL 內執行 Windows 命令列指令(.exe、.bat、.cmd 等),權限等同 SQL Server 服務啟動帳號。**極高風險**,SQL Server 2005 預設關閉。
-- 1. 允許修改進階選項
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
-- 2. 啟用 xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
執行完成後,即可呼叫:EXEC xp_cmdshell 'dir C:\';
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;
GRANT EXECUTE ON xp_cmdshell TO [User],且**必須**設定 **Proxy 帳號**(##xp_cmdshell_proxy_account## 憑證),執行時以 Proxy 帳號身分運行,而非服務帳號。EXEC sp_xp_cmdshell_proxy_account 'Domain\User', 'Password';| 原則 | 說明 |
|---|---|
| 預設關閉 | 安裝後即關閉,僅在明確業務需求時臨時開啟。 |
| 最小權限服務帳號 | SQL Server 服務使用專用網域帳號,僅擁有必要資料夾/登入權限,非 Local System/Administrator。 |
| Proxy 帳號隔離 | 非 sysadmin 執行時強制使用低權限 Proxy 帳號,避免服務帳號權限外洩。 |
| 稽核與監控 | 啟用 xp_cmdshell 稽核(登入失敗、執行命令)、Windows 事件轉發、SIEM 關聯分析。 |
| 命令白名單 | 應用層封裝允許命令清單,禁止直接拼接使用者輸入進命令字串(防命令注入)。 |
| 用畢即關 | 作業完成後立即關閉 xp_cmdshell,排程作業可在步驟首尾自動開關。 |