xp_cmdshell直接呼叫作業系統命令,等同資料庫留給 OS 的「大後門」。必須移除:
EXEC sp_dropextendedproc 'xp_cmdshell';
移除前記錄對應 DLL:
EXEC sp_helpextendedproc 'xp_cmdshell';
-- 或
SELECT o.name, c.text FROM dbo.syscomments c JOIN dbo.sysobjects o ON c.id=o.id WHERE o.name='xp_cmdshell';
若業務極少數需求須恢復 (SQL 2000):EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'。
EXEC sp_dropextendedproc 'xp_regaddmultistring';
EXEC sp_dropextendedproc 'xp_regdeletekey';
EXEC sp_dropextendedproc 'xp_regdeletevalue';
EXEC sp_dropextendedproc 'xp_regenumvalues';
EXEC sp_dropextendedproc 'xp_regremovemultistring';
-- 保留 xp_regread / xp_regwrite (SQL Agent 作業需求)
USE master;
REVOKE EXECUTE ON sp_MSSetServerProperties TO PUBLIC; -- 修改服務啟動模式
REVOKE EXECUTE ON sp_MSsetalertinfo TO PUBLIC;
sysadmin 使用者建立/修改作業 (MSDB 角色 SQLAgentUserRole 等)。db_owner 或 public 最小權限。sa 強制複雜密碼、禁用或重命名,應用程式嚴禁使用 sa 連線。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters\FavorDBCS = 0。%windir%\system32\inetsrv\metabase.xml,AspMaxRequestEntityAllowed 增加一個 0 (200KB → 2000KB)。需先停 IIS Admin Service。