none
面向Microsoft SQL Server 2005的本机XML Web Services概述(2) RRS feed

  • 常规讨论

  • 身份验证与安全

    HTTP 终结点支持以下标准身份验证机制:基本、摘要、集成(NTLM、Kerberos)以及 SQL 身份验证。首先会在 HTTP 传输层进行身份验证。一旦这个验证成功,将使用用户的 SID 进行 SQL 身份验证。除了以下情况,这适合于所有选项:通过指定 LOGIN_TYPE = MIXED 启用了 SQL 身份验证。SQL 身份验证凭证将使用 WsSecurity 用户名称标记标头作为 SOAP 数据包的一部分发送。管理员能按每个终结点设置基于 IP 的限制,以通过仅允许特定的 IP 或 IP 范围访问 HTTP 终结点来限制对终结点的访问。从概念上讲,“终结点”就是一个“应用程序”,实现单个应用程序的所有方法均映射到终结点,因此安全机制应用到终结点以控制对应用程序的访问。终结点通过设计进行保护;下面列出一些可以帮助保证终结点安全的事项。

    ◆默认关闭。不映射任何默认终结点或 Web 方法;必须显式地创建和指定。
    ◆安全检查也应用到对象,因此,映射的存储过程仅在用户对终结点具有连接权限且对存储过程具有执行权限时才可以执行。
    ◆不支持匿名连接到终结点。所有请求(包括 WSDL 请求)均要通过身份验证。为了提交任何请求,客户端必须根据 SQL Server 原则进行身份验证。

    当创建了终结点后,只有系统管理员角色和终结点所有者的成员才能连接到该终结点。必须向用户授予访问终结点的连接权限;此操作是通过执行以下语句实现的:

    GRANT CONNECT ON HTTP ENDPOINT::hello_world_endpoint TO [DOMAIN\USER]

    非 Microsoft 平台上的客户端可以通过使用基本身份验证或 SQL 身份验证连接到 SQL Server。不过使用基本身份验证或 SQL 身份验证要求保证通道的安全,以使用户只能在启用了 SSL 的端口上进行连接。

    WSDL

    WSDL 是以 XML 编写的用于描述 Web 服务的文档。它指定服务的位置和服务公开的操作(或方法)。WSDL 提供了客户端与 Web 服务交互所必需的信息。

    Visual Studio .NET 和 Jbuilder 一类的工具将使用 WSDL 生成代理代码,应用程序可使用此代理代码与 Web 服务进行通信。如果终结点启用了 WSDL,该终结点将在收到 WSDL 请求时产生 WSDL。当向本文早些时候创建的终结点发送已通过身份验证的请求时,它将产生 WSDL。WSDL 请求是简单的窗体 HTTP get 请求。

    服务器将查询与终结点相关的元数据,并动态生成 WSDL。生成的 WSDL 提供了存储过程参数的丰富类型说明。服务器可以生成不同风格的 WSDL,根据是使用基元 xsd 类型还是复杂类型来描述请求/响应消息中的参数,我们分别将之称为简单 WSDL 和复杂 WSDL。默认使用复杂类型。

    SOAP RPC:方法调用

    在上面创建的终结点中,我们已将此存储过程 master.dbo.hello_world 作为 Web 方法公开,而 Web 方法可以通过 SOAP RPC 执行。以下是一个 SOAP 消息的示例,该消息通过 HTTP 发送到服务器以通过 SOAP 调用此 SP。

    http://schemas.xmlsoap.org/soap/http"

    http://tempuri.org/">
    Hello World!

    结果将为一个包含以下内容的 SOAP 包封:



    Hello World!

    批处理:即席查询

    当通过使用 T-SQL 命令在终结点上启用了批处理时,另一个 SOAP 方法(名为“sqlbatch”)将隐式地在终结点上公开。sqlbatch 方法允许通过 SOAP 执行 T-SQL 语句。此方法采用两个参数。第一个参数名为“”,是批量的 T-SQL 语句。第二个参数名为“”;如果 T-SQL 语句使用了任何参数,它将包含一个参数信息的数组。例如,下面是 SOAP 请求的请求体,其中调用了 sqlbatch 方法,并执行一个参数化的查询。

    http://schemas.microsoft.com/SQLServer/2001/12/SOAP">

    SELECT EmployeeID, LoginID, Gender
    FROM Employee
    WHERE EmployeeID=@x
    FOR XML AUTO;



    xmlns="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlParameter">
    1


    此 SOAP 请求的响应将包括以下内容:




    管理

    我们已经了解了创建终结点并根据终结点提交 SOAP 请求非常简单。由于现在仅须管理一个组件(即 SQL Server),所以管理得到了简化。我们不需要管理 IIS 组件。终结点抽象为管理员提供了更大的灵活性,他们可以启用 IP 筛选。这还消除了打开另一个端口的需要,因为我们可以重新使用供 http/https Web 通信使用的端口。通过仅显式地向特定的个体授予 CONNECT 特权,还可以仅向这些用户提供对终结点的访问权限。

    结束语

    通过使用本机 SOAP 访问,我们已提供了基于应用广泛并有相应文档说明的标准(如 SOAP/HTTP)的协议,用以访问 SQL Server。这样使得更多类型的客户端可以连接到 SQL Server,从而加强了互操作性,并更方便扩展。

    2009年5月31日 3:40