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

SQL Server 安全設定完整指南:從補丁、連接埠、權限到擴展預存程序封鎖

     編輯:關於SqlServer

前言

SQL Injection 攻擊頻傳,但 SQL Server 2000 已通過美國政府 C2 級安全認證。安全關鍵在於**正確配置**而非產品本身。本文提供四階段防護體系:補丁與基線、網路隱藏、最小權限、危險功能封鎖。

階段一:基線防護

  1. 套用最新 Service Pack 與安全更新:SP3a 為 2000 基線,訂閱 Microsoft Security Bulletin
  2. Microsoft Baseline Security Analyzer (MBSA) 掃描:檢測
    • 過多 sysadmin 成員
    • 非 sysadmin 擁有 CmdExec 作業權限
    • 空/弱密碼 (含 sa)
    • 混合模式 vs 僅 Windows 驗證
    • Administrators 群組過度授權
    • 資料目錄 ACL 不當
    • 安裝腳本含明文 sa 密碼
    • Guest 帳戶過度授權
    • 域控制器上運行 SQL Server
    • Everyone 群組註冊表存取
    • 服務帳戶配置不當
    • 缺乏 SP/安全更新
  3. 強制 Windows 驗證模式:企業管理器 → 伺服器屬性 → 安全性 → 僅限 Windows 驗證。優勢:Kerberos/NTLM 強協議、密碼策略、憑證委派、客戶端無需儲存密碼
  4. 物理與邏輯隔離:鎖控機房、防火牆隔離內網、定期異地備份
  5. sa 強密碼:即使僅用 Windows 驗證,也須設強密碼防模式切換風險

階段二:網路隱藏與連接埠保護

  • 修改預設 1433 連接埠:企業管理器 → 網路配置 → TCP/IP 屬性 → 連接埠號
  • 隱藏伺服器:同處勾選「隱藏伺服器」,不回應用戶端列舉廣播
  • TCP/IP 篩選封鎖 1433:網路連線 → 進階 → TCP/IP 篩選 → 僅允許新連接埠
  • 效果:攻擊者掃描 1433 無回應;即使竊取帳號,無法直接用查詢分析器遠端連線,需從 Web 層構造注入並解析回顯,難度大增

階段三:最小權限原則 (資料庫角色精細授權)

核心觀念:Web 連線帳號**絕不使用 sa / db_owner**。建立自訂資料庫角色,僅授予必要物件權限。

權限層級說明

類別權限項目範圍
物件權限SELECT/INSERT/UPDATE/DELETE表/檢視表 (可細至欄位)
SELECT/UPDATE使用者定義函數
INSERT/DELETE整列操作,不可細至欄位
EXECUTE預存程序/函數
REFERENCES外鍵參考
陳述式權限CREATE TABLE/VIEW/PROCEDURE/FUNCTION/RULE/DEFAULT建立物件
BACKUP DATABASE/LOG備份
CREATE DATABASE建立資料庫

內建固定資料庫角色 (勿直接給 Web 帳號)

角色權限風險
db_owner資料庫完整控制極高:可備份、建表、授權、植入木馬
db_securityadmin管理所有權限/角色高:可提權自己
db_ddladmin所有 DDL (無 GRANT/REVOKE)中:可修改結構
db_datareader讀所有使用者表低:唯讀
db_datawriter寫所有使用者表中:可竄改資料
db_denydatareader拒絕讀所有表拒絕
db_denydatawriter拒絕寫所有表拒絕

自訂角色建立步驟 (企業管理器)

  1. 展開資料庫 → 右鍵「角色」 → 新增資料庫角色
  2. 命名 (如 WebApp_Role)
  3. 「物件權限」頁 → 逐一勾選必要表/檢視表/預存程序的 SELECT/INSERT/UPDATE/DELETE/EXECUTE
  4. **不勾選** db_owner、db_securityadmin、db_backupoperator、CREATE TABLE 等高危權限
  5. 建立登入帳號 → 對應使用者 → 加入此角色,**伺服器角色全不勾選**

階段四:封鎖危險擴展預存程序與 ActiveX 自動化

SQL Server 內建擴展預存程序可讀寫登錄、檔案系統、執行命令,注入攻擊利用這些「跳板」提權。採取「寧錯殺不放過」策略移除。

必須移除的擴展預存程序

-- 核心危險組
EXEC sp_dropextendedproc 'xp_cmdshell'        -- 執行 OS 命令 (最高危)
EXEC sp_dropextendedproc 'xp_regread'         -- 讀登錄
EXEC sp_dropextendedproc 'xp_regwrite'        -- 寫登錄
EXEC sp_dropextendedproc 'xp_regdeletekey'    -- 刪登錄鍵
EXEC sp_dropextendedproc 'xp_regdeletevalue'  -- 刪登錄值
EXEC sp_dropextendedproc 'xp_regenumkeys'     -- 列舉登錄鍵
EXEC sp_dropextendedproc 'xp_regenumvalues'   -- 列舉登錄值
EXEC sp_dropextendedproc 'xp_regaddmultistring'
EXEC sp_dropextendedproc 'xp_regremovemultistring'

-- 資訊洩露組
EXEC sp_dropextendedproc 'xp_dirtree'         -- 列目錄樹
EXEC sp_dropextendedproc 'xp_enumgroups'      -- 列舉 Windows 群組
EXEC sp_dropextendedproc 'xp_fixeddrives'     -- 列固定磁碟空間
EXEC sp_dropextendedproc 'xp_loginconfig'     -- 登入配置
EXEC sp_dropextendedproc 'xp_enumerrorlogs'   -- 列錯誤日誌
EXEC sp_dropextendedproc 'xp_getfiledetails'  -- 取檔案詳細資訊

ActiveX 自動化程序 (OLE Automation) - 同等危險

EXEC sp_dropextendedproc 'sp_OACreate'
EXEC sp_dropextendedproc 'sp_OADestroy'
EXEC sp_dropextendedproc 'sp_OAMethod'
EXEC sp_dropextendedproc 'sp_OAGetProperty'
EXEC sp_dropextendedproc 'sp_OASetProperty'
EXEC sp_dropextendedproc 'sp_OAGetErrorInfo'
EXEC sp_dropextendedproc 'sp_OAStop'

恢復腳本 (僅限維護窗口、sysadmin 執行)

EXEC sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
EXEC sp_addextendedproc 'xp_regread', 'xpstar.dll'
-- ... 依移除清單對應 .dll 恢復
-- 查詢 DLL 對應: EXEC sp_helpextendedproc 'xp_cmdshell'

補強:重命名 DLL 防駭客恢復

移除後將 xplog70.dll、xpstar.dll 改名 (如 .bak),即使攻擊者取得 sa 也無法 sp_addextendedproc 成功。

額外加固清單

  • 資料庫檔案**不放預設路徑** (Program Files\Microsoft SQL Server\MSSQL\Data)
  • SQL Server**不安裝在 Program Files** 目錄 (權限鬆散)
  • 單一資料庫單一專用帳號,僅授 public + 自訂角色
  • 稽核登入失敗/成功:企業管理器 → 伺服器屬性 → 安全性 → 稽核層級「失敗」或「全部」
  • 定期審核 sysadmin 成員、Proxy 帳號、連結伺服器

總結

安全是纵深防禦:**補丁基線 → 網路隱藏 → 最小權限 → 功能封鎖 → 稽核監控**。Web 應用層仍需參數化查詢、輸入驗證、WAF 等配合,資料庫層才是最後一道防線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved