首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 移除高風險擴充預存程序強化安全性

     編輯:關於SqlServer

為何要移除?

SQL Server 2000 內建多支擴充預存程序(Extended Stored Procedures,xp_*)提供作業系統層級存取(檔案、登錄、命令執行、COM 物件等)。若資料庫帳號遭駭或 SQL 注入,攻擊者可透過這些 xp 取得作業系統控制權,風險極高。微軟建議最小權限原則:不需要即移除。

高風險 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

若業務確實需要,如何安全替代?

還原腳本(緊急回滾用)

USE master;
GO
EXEC sp_addextendedproc 'xp_cmdshell', 'xp_cmdshell.dll';
EXEC sp_addextendedproc 'xp_dirtree', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_enumgroups', 'xplog70.dll';
EXEC sp_addextendedproc 'xp_fixeddrives', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_loginconfig', 'xplog70.dll';
EXEC sp_addextendedproc 'xp_enumerrorlogs', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_getfiledetails', 'xpstar.dll';
EXEC sp_addextendedproc 'sp_OACreate', 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OADestroy', 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OAGetErrorInfo', 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OAGetProperty', 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OAMethod', 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OASetProperty', 'odsole70.dll';
EXEC sp_addextendedproc 'sp_OAStop', 'odsole70.dll';
EXEC sp_addextendedproc 'xp_regaddmultistring', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regdeletekey', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regdeletevalue', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regenumvalues', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regread', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regremovemultistring', 'xpstar.dll';
EXEC sp_addextendedproc 'xp_regwrite', 'xpstar.dll';
GO

最佳實務建議

  1. 審計現狀:SELECT * FROM sysobjects WHERE xtype = 'X' 列出所有擴充預存程序。
  2. 評估相依:搜尋應用程式碼、Agent 作業、觸發器是否呼叫上述 xp。
  3. 分階段移除:先移除最高風險組,觀察業務影響,再移除次級組。
  4. 文件化:記錄移除清單、替代方案、回滾腳本,納入變更管理流程。

結語

移除不必要的擴充預存程序是 SQL Server 2000 硬化的基石動作。雖 SQL 2000 已停止支援,仍在運行的舊系統應儘速完成此項加固,降低攻擊面。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
原功能建議替代方案
xp_cmdshellSQL Agent 作業步驟 (CmdExec)、SSIS 執行封裝、CLR 預存程序(簽署憑證)
xp_dirtree / xp_getfiledetailsCLR 檔案系統操作、PowerShell + Agent
sp_OA*CLR 組件呼叫 .NET Framework、Service Broker 外部啟動器
xp_reg*原則管理、CLR 登錄存取、應用層配置表
sp_makewebtaskReporting Services、SSIS 輸出 HTML、應用層產生