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

Windows 整合驗證登入 SQL Server 失敗?可能是 MaxFieldLength 與 MaxRequestBytes 需調大

     編輯:關於SqlServer

問題背景

先前已因 Active Directory 群組過多導致 Kerberos Token 超過 MaxTokenSize,依微軟文件調整註冊表 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters\MaxTokenSize 並重啟服務,解決了 SSMS 連線問題。但Web 應用程式(含 SSRS)仍無法透過 Windows 整合驗證連線。

根因分析:HTTP.sys 另有兩個關鍵限制

當使用 Windows 整合驗證(Kerberos/NTLM)存取 Web 應用時,HTTP.sys 驅動程式會檢查兩個參數:

  • MaxFieldLength:單一標頭欄位最大長度(預設 16,384 bytes)
  • MaxRequestBytes:整個請求標頭最大長度(預設 16,384 bytes)

超大 Kerberos Token 會導致 `Authorization` 標頭超過預設值,HTTP.sys 直接拒絕請求並回傳錯誤,瀏覽器顯示「網頁無法顯示」(而非 404)。

IE 進階選項啟用 Windows 整合驗證
圖 1:IE 進階選項預設啟用 Windows 整合驗證

現象特徵

  • 使用主機名或別名(DNS)存取 → 立即失敗
  • 使用 IP 位址存取 → 頁面可載入,但後續 SQL 查詢執行失敗

原因:IP 存取時可能回退 NTLM(Token 較小),但後端連線 SQL Server 仍需 Kerberos 委派,Token 過大導致雙跳失敗。

解決方案:同步調整三個註冊表值

路徑:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

值名稱類型建議值(十進位)說明
MaxTokenSizeDWORD65535 (或更大)Kerberos Token 最大值,位於 Lsa\Kerberos\Parameters
MaxFieldLengthDWORD65535HTTP.sys 單一標頭欄位上限
MaxRequestBytesDWORD16777216 (16 MB)HTTP.sys 整個請求標頭上限
  1. 開啟 `regedit`,導覽至上述兩個路徑,新增/修改 DWORD 值。
  2. 重啟 HTTP 服務或直接重啟伺服器(含 SQL、Web、SSRS 服務)。
  3. 驗證:瀏覽器以主機名/別名存取 Web 應用,確認 SSMS、SSRS、自訂 Web App 均可正常整合驗證登入。

補充提醒

  • 若環境為網域控制站,請同步調整所有 DC 的 MaxTokenSize。
  • 調整後請監控記憶體用量,極大 Token 可能增加 LSASS 記憶體壓力。
  • 長期治理建議:精簡 AD 群組巢狀深度、移除無用群組、採用資源型群組策略,從源頭控制 Token 大小。

一次調齊三處上限,徹底解決「SSMS 好了但 Web 掛了」的經典斷層問題。

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