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

SQL Server 危險擴充預存程序移除與還原完整指南

     編輯:關於SqlServer

為何需移除危險擴充程序

SQL Server 內建多項擴充預存程序提供作業系統層級存取能力(如命令執行、登錄操作、COM 物件存取),若遭惡意利用可導致伺服器完全失陷。依最小權限原則,生產環境應移除非業務必要的高風險擴充程序。

核心移除清單

以系統管理員身分登入 master 資料庫,依序執行下列指令移除高風險元件:

-- 命令執行與系統存取
EXEC sp_dropextendedproc 'xp_cmdshell';
EXEC sp_dropextendedproc 'xp_enumgroups';
EXEC sp_dropextendedproc 'xp_loginconfig';

-- 錯誤日誌與檔案存取
EXEC sp_dropextendedproc 'xp_enumerrorlogs';
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';

-- 登錄操作系列
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';
EXEC sp_dropextendedproc 'xp_regwrite';

-- Web 任務相關
DROP PROCEDURE sp_makewebtask;

不可移除的關鍵擴充程序

下列三項擴充程序支援資料庫備份/還原與附加操作,非必要請勿移除:

  • xp_dirtree:建立/附加資料庫時掃描目錄結構
  • xp_regread:還原資料庫時讀取登錄設定
  • xp_fixeddrives:還原時檢查磁碟可用空間

還原腳本

若因應用相容性需重新載入,可在 master 執行:

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

操作建議

  1. 執行移除前請完整備份 master 資料庫。
  2. 在測試環境驗證應用程式相容性後,再套用至生產環境。
  3. 定期稽核 sys.extended_procedures 確認無未授權擴充程序被加入。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved