萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> sql server教程 >> SQL Server 本機 Web 服務的使用方案

SQL Server 本機 Web 服務的使用方案

摘要: 獲得有關如何設置 sql server 以便在異類環境中進行 Web 服務訪問的詳細討論,並且了解更多有關

SQL Server 中 Web 服務的主要方案的信息。

下載相關的 WebServicePerlScript.exe 代碼示例。

簡介

在 SQL Server 中,我們向數據庫引擎中添加了對本機 XML Web 服務的支持。這一功能是圍繞眾所周知的標准

(如 SOAP 1.2、WSDL 1.1 和 HTTP)設計的。將解決方案建立在這些標准之上,可以在大多數企業都擁有的異

類環境中支持互操作性和服務擴張。

添加到 SQL Server 中的新的基礎結構大大有利於直接向服務器外部公開 Web 服務,這是因為將本機 SOAP 堆棧

內置到數據庫引擎中消除了使用中間層進程(如 IIS)達到這一目標的需要。它還使 SQL Server 能夠作為組件

參與面向服務的體系結構,因為服務在這些新的體系結構中提供了黏合劑。本機 XML Web 服務使您既可以將存儲

過程作為 Web 服務公開,而且可以針對數據庫服務器執行特殊的 T-SQL 語句。實際上,我們已經基於 SOAP 創

建了一種新的訪問 SQL Server 的機制;SOAP 提供了與當前的 Tabular Data Stream (TDS) 專用二進制協議幾

乎相同的功能。

我們首先詳細考察如何設置 SQL Server 以便在異類環境中進行 Web 服務訪問。我們將查看如何使用 Perl 腳本

進行數據庫管理,並且簡要考察一下其他可以使用本機 Web 服務的方案。

異類訪問

請考慮這樣一個環境,在這裡,運行在非 Microsoft 操作系統上的應用程序需要連接到 SQL Server。對於此類

應用程序,我們的建議是使用 SQL Server 授權 (SQL-Auth) 連接到 SQL Server Web 服務。讓我們考察一下該

機制是如何工作的。

要公開 Web 服務,用戶需要做的第一件事情是創建一個終結點。請觀察如下所示的用於創建終結點的數據定義

語言 (DDL) 語句。它將一個名為“GetCustomerInfo”的存儲過程公開為 Web 服務。

盡管術語 WEBMETHOD 在概念上與 ASP.NET 中的 [WebMethod] 相同,但它在其他方面與 ASP.NET 無關。

CREATE ENDPOINT sql_auth_endpoint
STATE = STARTED AS HTTP( SITE = '*', PATH = '/sql/sql_auth',
AUTHENTICATION = (BASIC), PORTS=(SSL) )
FOR SOAP( WEBMETHOD'GetCustomerInfo'
(
name='AdventureWorks.dbo.GetCustomerInfo',
schema=STANDARD ) ,
LOGIN_TYPE = MIXED,
WSDL = DEFAULT,
DATABASE = 'AdventureWorks',
BATCHES=ENABLED,
NAMESPACE = 'http://Adventure-Works/Customers/' )

為了保持 SQL Server 中的“設計安全”主題,我們在任何情況下都不允許對 SQL Server 進行 ANONYMOUS

訪問。這意味著所有連接都需要使用受支持的身份驗證方案之一在 HTTP 傳輸級別進行身份驗證。BASIC

是最常見和使用最廣泛的身份驗證模型之一,因為它受到大多數客戶端的支持。但是,它也是最不安全的選擇,

因為它要求以明文發送密碼。為了避免該問題,我們要求每當選擇 BASIC 作為身份驗證類型時,都要為 SSL

啟用終結點。要啟用 SSL,必須執行以下命令:

httpcfg set ssl /i IP:Port /h Hash /g Guid 

其中,Hash 是證書哈希,Guid 是一個標識注冊該證書的實體的全局唯一標識符 (GUID) 字符串。用戶可以

通過在 Certificate 中查找 Thumbprint 值來獲取證書的哈希值。作為最佳實施策略,請為 SQL Server

的每個實例創建單個 GUID,並且對於該實例執行的所有證書注冊,都使用同一個 GUID。您可以使用任何

工具來發現該 GUID 值。Httpcfg.exe 隨附了 Windows 支持工具。

因此,在該示例中,它將成為:

httpcfg set ssl /i 1.1.1.1:443 /h 4463b7899c499a38812a7bbe7d73f4d31d026b2f /g 
"{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}" 

其中,1.1.1.1 會被宿主 SQL Server 的計算機的 IP 地址替換。

那麼,如何在終結點上啟用 SQL-Auth 呢?這是通過在終結點語法的 payload 節中指定“LOGIN_TYPE=MIXED”

完成的。通過指定“MIXED”,您可以使用集成式或 SQL 身份驗證對 SQL Server 實例進行身份驗證。現在,

我們使 SQL 憑據能夠作為有效負載(消息)的一部分流動。在完成該工作時,我們已經小心地確保傳輸憑據的

SOAP 標頭與 WS-Security Username 標記相匹配。遵循 WS-Security 標准自然可以提高互操作性;例如,

只需很少的幾行代碼,就可以使用 Web Services Enhancements 2.0 for Microsoft .NET (WSE) 生成用戶

名標記 SOAP 標頭。

正如您可以在上述討論中看到的那樣,存在兩種級別的身份驗證:

傳輸級別

消息級別

現在,讓我們深入探討這兩個級別的身份驗證是如何工作的。

所有請求總是在傳輸級別進行身份驗證。因此,如果用戶提交無效的 BASIC 身份驗證憑據,則連接失敗

,並且發生 HTTP 401 訪問被拒絕錯誤。如果用戶成功地在傳輸級別進行身份驗證,則我們具有兩個選擇。

我們可以使用傳輸憑據或作為 SOAP 消息的一部分到來的憑據登錄 SQL Server。所選的憑據是由 SOAP

消息中是否存在 SQL-Auth 憑據確定的。如果 SOAP 消息中存在憑據,則我們將試圖使用 SQL-Auth

憑據登錄 SQL Server 數據庫。如果該方法失敗,則我們向用戶返回失敗,並且我們不會後退到使用

BASIC 身份驗證憑據。如果 SOAP 消息中不存在憑據,則我們將試圖使用傳輸憑據登錄 SQL Server。

包含 SQL 憑據的 SOAP 消息如下所示:

:
:
:
:
:
user :
:
password
:
:
:
:
:
:

xmlns:SOAP- ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sql="http://schemas.microsoft.com/sqlserver/2004/SOAP" xmlns:sqlsoaptypes="http://schemas.microsoft.com/sqlserver/2004/SOAP/types" xmlns:sqlrowcount="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlRowCount" xmlns:sqlmessage="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlMessage" xmlns:sqlresultstream="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlResultStream" xmlns:sqltransaction="http://schemas.microsoft.com/sqlserver/2004/SOAP/types/SqlTransaction" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"> :
:
:
SOAP-ENV:Client :
:
There was an error in the incoming SOAPrequest packet: Client, LoginFailure, AccessDenied
:
http://schemas.microsoft.com/sqlserver/2004/SOAP :
:
:
SOAP-1_2-ENV:Sender :
:
sqlsoapfaultcode:LoginFailure :
:
sqlsoapfaultcode:AccessDenied :
:
:
:
:
:
There was an error in the incoming SOAPrequest packet: Sender, LoginFailure,

AccessDenied :

copyright © 萬盛學電腦網 all rights reserved