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

建立安全的 MSSQL Server 服務啟動帳號:最小權限實戰指南

     編輯:關於SqlServer

SQL Server 服務啟動帳號權限過高是重大安全隱患:一旦駭客取得 sysadmin 或透過 SQL 注入執行 xp_cmdshell、xp_regdeletekey 等擴展預存程序,即可以服務帳號身分執行任意作業系統指令。本文詳述如何建立最小權限的專用服務帳號,並透過企業管理器/Configuration Manager 正確套用。

風險根源:擴展預存程序的執行身分

  • 擴展預存程序 (xp_cmdshell, sp_OA*, xp_reg*...) 在 SQL Server 進程空間內載入 DLL 執行。
  • 其作業系統存取權限 完全繼承自 SQL Server 服務啟動帳號的 SID。
  • 若服務帳號屬於 Administrators 群組 → 駭客可刪除系統檔案、修改登錄、建立後門、橫向移動。

最小權限服務帳號建立步驟 (成員伺服器)

1. 建立本地/網域專用帳號


-- 本地帳號範例
User: sqlsvc
Password: 複雜長密碼 (16+ 字元)
Description: SQL Server 服務專用帳號 - 最小權限

2. 指派必要的三項基礎權限

權限項目用途設定位置
資料庫安裝目錄 讀寫權限存取 .mdf/.ldf/.bak/錯誤日誌/FTData 等檔案總管 → 安全性 → 編輯 → 加入 sqlsvc → 修改/讀取/寫入
以服務登入 (SeServiceLogonRight)允許帳號啟動 Windows 服務secpol.msc → 本地原則 → 使用者權利指派
讀取登錄權限讀取 HKLM\Software\Microsoft\MSSQLServer 等啟動參數regedit → 權限 → 加入 sqlsvc → 讀取

3. 進階權限 (視功能需求額外授予)


-- 以下權限僅在必要時授予 (透過 secpol.msc)
SeBatchLogonRight             -- SQL Agent 作業步驟需求
SeLockMemoryPrivilege         -- AWE / 大頁面 / 記憶體鎖定
SeChangeNotifyPrivilege       -- 繞過遍歷檢查 (效能優化)
SeAssignPrimaryTokenPrivilege -- 取代程序 Token (部分擴展程序需求)

4. 使用企業管理器 / Configuration Manager 套用 (關鍵步驟)

  1. 開啟 SQL Server Configuration Manager (SQL 2005+) 或企業管理器 (SQL 2000)。
  2. 右鍵 SQL Server (MSSQLSERVER) 服務 → 「屬性」 → 「登入」分頁。
  3. 選擇「此帳號」,輸入 .\sqlsvc (本地) 或 DOMAIN\sqlsvc 及密碼。
  4. 按下「確定」 → 工具會自動完成:
    • 授予資料庫目錄完整控制權
    • 授予「以服務登入」等使用者權利
    • 設定登錄機碼 ACL
    • 註冊 SPN (網域環境)
  5. 重啟 SQL Server 服務生效。

驗證與審計

  • 確認服務啟動成功:錯誤日誌無 7000/7038 事件。
  • 檢查有效權限:以 sqlsvc 身分登入 → 執行 whoami /priv 核對權限清單。
  • 滲透測試驗證:使用 sysadmin 執行 xp_cmdshell 'whoami' → 應回傳 sqlsvc 而非 administrator。

常見錯誤與避坑指南

網域控制站 (DC) / 叢集環境補充

  • DC 上運行 SQL Server:服務帳號需具備「以服務登入」+「允許本地登入」+ 網域控制站特定權限,建議不要在 DC 安裝 SQL Server。
  • 容錯移轉叢集:服務帳號需為網域帳號,於叢集所有節點具備相同權限;建立時勾選「叢集服務帳號」選項。
  • 群組受控服務帳號 (gMSA, Windows 2012+):自動密碼輪換、SPN 管理,為現代最佳選擇。

總結

「最小權限服務帳號」是纖深防禦的關鍵一環。配合 停用 xp_cmdshell、移除高風險擴展程序、啟用稽核、定期修補,可將 SQL Server 攻擊面壓縮至最小。請立即檢視您的生產環境服務帳號權限,若為 Administrator/Local System,請排程變更為專用最小權限帳號。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤做法後果正確做法
直接在 services.msc 變更帳號遺漏 ACL/權限自動設定,導致服務啟動失敗或權限不足必須用 Configuration Manager / 企業管理器變更
頻繁更換服務帳號登錄殘留大量舊帳號 SID,膨脹 Registry、潛在安全風險固定專用帳號,極少變更
授予本機 Administrators喪失最小權限防護,擴展程序可任意控制作業系統僅授予上表三項基礎權限 + 功能必要權限
忽略 SQL Agent 帳號Agent 作業步驟 (CmdExec/PowerShell) 同樣繼承高權限Agent 同樣使用最小權限帳號 (可共用或分離)