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

透過 HTTP 存取 SQL Server 2000:虛擬目錄、模板查詢與 XML 回應

     編輯:關於SqlServer

架構總覽

SQL Server 2000 透過 SQL ISAPI Extension (sqlisapi.dll) 在 IIS 中發布 HTTP 端點,允許用戶端以 URL 直接執行查詢、模板、XPath,回傳 XML。核心組件:

  • 虛擬目錄:對應單一資料庫,設定連線字串、認證、權限。
  • 模板查詢:.xml 檔包含 SQL/XPath、參數宣告、XSLT 參考,儲存於虛擬目錄 template 子資料夾。
  • FOR XML:查詢子句產生 XML 結構 (AUTO, RAW, EXPLICIT)。
  • XSLT:伺服器端/用戶端轉換 XML 為 HTML/CSV/其他格式。

建立虛擬目錄步驟

  1. 開始 → 程式集 → Microsoft SQL Server → Configure SQL XML Support in IIS。
  2. 選擇網站 → 右鍵 新增虛擬目錄。
  3. 輸入名稱 (如 Northwind)、實體路徑 (存放模板/XSLT)、資料庫連線 (伺服器、資料庫、認證)。
  4. 設定 安全性:Basic/Integrated/Digest,建議 Windows 整合驗證 + SSL。
  5. 設定 設定:啟用 Allow URL Queries、Allow Template Queries、Allow XPath、Allow POST。

三種呼叫方式範例

1. 直接 URL 查詢 (僅測試/原型)


https://server/Northwind?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO&root=Customers
缺點:SQL 曝露於 URL、長度限制、無法重用、安全性差 (SQL Injection 風險)。

2. 模板查詢 (生產標準)

檔案: C:\Inetpub\Northwind\template\GetCustomers.xml



  
    
  
  
    SELECT CustomerID, CompanyName, ContactName, Phone
    FROM Customers
    WHERE Country = @Country
    FOR XML AUTO, ELEMENTS
  

呼叫:


https://server/Northwind/template/GetCustomers.xml?Country=Germany

3. XPath 查詢 (需 XML 視圖 / 對應結構描述)

建立 Customers.xsd 定義 sql:relation、sql:field,註冊於虛擬目錄 schema 資料夾。


https://server/Northwind/schema/Customers.xsd/Customer[@Country='UK']

安全性強化清單

措施說明
停用 URL 查詢虛擬目錄設定取消 Allow URL Queries,僅允許模板/XPath。
Windows 整合驗證 + SSLIIS 設定 整合式 Windows 驗證、綁定憑證啟用 HTTPS,禁止 Basic/匿名。
最小權限資料庫使用者虛擬目錄連線使用僅具 SELECT/EXECUTE 權限的資料庫使用者,非 sa/db_owner。
參數化模板所有使用者輸入透過 sql:param 綁定,防止注入。
防火牆限制存取 IP僅允許應用伺服器/閘道 IP 存取虛擬目錄埠。

效能優化

  • IIS 輸出快取:針對靜態模板結果設定 Cache-Control: max-age=...。
  • SQL 查詢最佳化:索引、參數嗅探、避免 FOR XML EXPLICIT 複雜邏輯。
  • XSLT 快取:MSXML IXSLTemplate 編譯快取,避免每請求重新編譯。
  • 連線共用:虛擬目錄連線字串啟用 Pooling=true (預設)。

遷移建議 (SQL Server 2005+)

HTTP 端點在 SQL 2005 引入 原生 HTTP 端點 (CREATE ENDPOINT),移除 IIS 依賴;SQL 2008+ 建議改用 WCF Data Services / OData / ASP.NET Web API 配合 FOR JSON,架構更標準、生態更豐、安全性更佳。舊系統維護期內,上述設定仍適用。

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