使用本机 XML Web 服务的最佳方法

后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

本主题介绍了计划和评估 SQL Server 中的本机 XML Web 服务时可以使用的一些最佳方法,它们用于商业解决方案。这些建议在下列几个方面提供帮助:

  • 当使用本机 XML Web 服务时,有助于确保安装 SQL Server 的安全性。

  • 通过提供使用指南,有助于改进安装 SQL Server 的性能。这些指南可以帮助确定应用程序是否通过使用本机 XML Web 服务而有效地得到服务。

安全性最佳方法

当部署本机 XML Web 服务时,请考虑下列安全性最佳方法建议:

  • 使用 Kerberos 身份验证。

  • 限制端点与特定用户或组的连接权限。

  • 使用安全套接字层来交换敏感数据。

  • 使用防火墙保护 SQL Server。

  • 验证在服务器上已禁用 Windows Guest 帐户。

  • 根据需要控制和更新端点状态。

  • 尽可能使用安全端点默认值。

使用 Kerberos 身份验证

使用 CREATE ENDPOINT (Transact-SQL) 来创建端点时,选择 AUTHENTICATION=KERBEROS 或 AUTHENTICATION = INTEGRATED,以便使基于 Kerberos 的 Windows 集成安全性能够被用作端点上使用的身份验证类型。第一个选项将仅允许 Kerberos 作为端点的身份验证模式。第二个选项将允许端点支持 NTLM 和 Kerberos 身份验证。

对于身份验证,Kerberos 协议通过使用内置功能(如相互身份验证)改进了安全性。这意味着服务器和客户端的身份都要经过验证。

当使用 Kerberos 身份验证时,SQL Server 必须将服务主体名称 (SPN) 与运行它的帐户相关联。有关详细信息,请参阅使用 Http.sys 注册 Kerberos 服务主体名称

限制端点与特定用户或组的连接权限

创建部署所需的端点之后,通过使用 Transact-SQL 语句(如 GRANT CONNECT 和 ALTER ON ENDPOINT)设置端点连接权限来保护它们。分配连接权限时,请仅将权限授予特定用户或保留的特定组,使端点可以访问 SQL Server。

通常应该限制权限,仅允许单个用户连接到端点。不建议将访问权限授予 public 角色。而是建议先完全了解 SQL Server 的权限模型。然后使用此模型明智地控制端点访问。

重要说明重要提示

public 角色是一个特殊的数据库角色,每个 SQL Server 用户都属于它。此角色包含了可以访问数据库的任意用户的默认访问权限。由于此数据库角色是 SQL Server 的内置默认角色,用作授予所有用户访问权限的一种方式(类似于 Windows 权限中的 Everyone 或 Authenticated Users),因此在配置 SQL Server 上的权限时应该谨慎使用该角色。

有关详细信息,请参阅 GRANT 端点权限 (Transact-SQL)

使用安全套接字层来交换敏感数据

通过安全 TCP/IP 套接字(IP 地址和 TCP 端口号的组合)接口,安全套接字层 (SSL) 协议提供对数据的加密和解密支持。对于要提供 SSL 加密的 SQL Server 端点,必须首先配置证书。

在为默认 SSL 端口 443 注册证书时,注意其他应用程序可能也在共享同一个证书。例如,Internet Information Services (IIS) 可能正驻留同一个端口上的 SSL 通信,这种情况下此配置可能会影响 IIS 用户。由于 SSL 端口及其证书的共享,可能存在安全性问题。

有关详细信息,请参阅配置 SSL 使用的证书

使用防火墙保护 SQL Server

为了确保可能的最佳安全性,应该仅使用受防火墙保护的本机 XML Web 服务。确保设置端点时,用于提供 HTTP 访问的任何 TCP 端口号都受防火墙的保护。允许 Internet 客户端直接访问 SQL Server 的安装并且它不受防火墙的保护,这种网络配置并不推荐。有关详细信息,请参阅安装 SQL Server 的安全注意事项

验证在服务器上已禁用 Windows Guest 帐户

Guest 帐户是 Microsoft Windows 的大多数版本提供的内置用户帐户。在 Windows Server 2003 中,默认情况下禁用。对于 Windows 2000 Server 和 Windows NT Server 4.0,默认情况下启用。

若要降低使用端点时外在攻击的风险,应该确保运行 SQL Server 的服务器禁用 Guest 帐户。有关详细信息,请参阅 Windows 帮助中的主题“禁用或激活本地用户帐户”。

根据需要控制和更新端点状态

通过使用 CREATE ENDPOINT (Transact-SQL) 创建端点时,默认状态将停止,除非通过指定 STATE = STARTED 显式启动它。若要控制现有端点的状态,请使用 ALTER ENDPOINT (Transact-SQL) 来指定 STOPPED、STARTED 或 DISABLED。

例如,使用下列语句来启动或停止以前创建的端点 sql_endpoint:

ALTER ENDPOINT sql_endpoint STATE=STARTED

ALTER ENDPOINT sql_endpoint STATE=STOPPED

还应该禁用端点或删除端点上的特定 Web 方法或端点(如果您认为不会使用它们)。

下列示例显示了如何禁用端点:

ALTER ENDPOINT sql_endpoint STATE=DISABLED

注意注意

在禁用端点之后,重新启动 SQL Server 服务 (MSSQLServer) 之前无法重新启动端点。

若要从端点删除 Web 方法,应该使用类似于下列格式的语句:

ALTER ENDPOINT sql_endpoint

FOR SOAP

(

DROP WEBMETHOD 'SayHello'

)

若要删除端点,请使用 DROP ENDPOINT

尽可能使用安全端点默认值

通过使用 CREATE ENDPOINTALTER ENDPOINT 创建或修改端点时,将会应用下列选项默认值,除非另外显式设置:

  • BATCHES = DISABLED

    为端点禁用 Transact-SQLbatch 模式。

  • LOGIN_TYPE = WINDOWS

    对于端点用户仅允许 Windows 身份验证。

除非必须修改这些设置以支持应用程序部署中需要的访问权限或功能,否则建议尽可能使用这些选项的默认值。

有关选择加密算法的信息,请参阅选择加密算法

性能最佳方法

部署本机 XML Web 服务时,请考虑下列性能最佳方法建议:

  • 在适当的方案中部署。

  • 计划基于 SOAP 的解决方案时其他服务器资源中的因子。

  • 根据要求配置适当的 WSDL 选项。

在适当的方案中部署

本机 XML Web 服务最适于符合下列要求的方案:

  • 应用程序返回或使用 XML 数据。

  • 应用程序极依赖存储过程进行业务逻辑。

  • 作为业务解决方案的一部分,您希望集成驻留 SQL Server 的 Web 服务应用程序和其他 Web 服务应用程序来实现面向服务的体系结构 (SOA) 的目标。

  • 为了在同一个服务器上一起部署 Web 服务,为 SQLXML 中间层解决方案寻找更好的执行替换。

  • 希望生成并发布 Intranet 网站(其中丰富的功能集和 SQL Server 2005 Reporting Services 或更高版本的其他开销可能超出要求)的静态报表。

同样,在具有下列要求的方案中,建议不使用本机 XML Web 服务:

  • 应用程序用于插入或检索二进制大型对象 (BLOB) 数据,例如大型 binary、image 或 text 值。

  • 应用程序要求实时事务处理和关键响应时间。

  • 正结合其他处理应用程序(如 TPC Benchmark C [TPC-C] 应用程序)使用 SQL Server。

计划基于 SOAP 的解决方案时其他服务器资源中的因子

出于容量计划的目的,请注意,与表格格式数据流 (TDS) 协议不同,SOAP 性能因应用程序而异,并可能要求额外的服务器资源开销。例如,由 SQL Server 产品组执行的 SQL Server 2005 测试中,在返回大型 XML 文档的方案中,基于 SOAP 访问的所用时间比基于 TDS 访问的所用时间长 20% 到 30%。

根据要求配置适当的 WSDL 选项

在部署本机 XML Web 服务之前,应该确定使用合适的 WSDL 选项来支持解决方案所需的所有客户端和操作系统。

若要在 Web 服务客户端包含非 Windows 操作系统所在的异类环境中获得最大的互操作性,请使用简单 WSDL。对于使用 Microsoft Visual Studio 2005 进行开发工作所在的仅 Windows 环境,可以使用默认 WSDL 访问 Visual Studio 2005 中包含的大量类型支持。

有时,第三方 SOAP 客户端可能要求自定义的 WSDL 进行互操作性。有关详细信息,请参阅实现自定义 WSDL 支持