SQL Server 本机 Web 服务的利用筹划[MSSQL防范]
本文“SQL Server 本机 Web 服务的利用筹划[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
择要: 得到有关若何设置 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 :
:
https://srikr-800.redmond.corp.microsoft.com:443/sql/sql_auth :
:
http://schemas.microsoft.com/sqlserver/2004/SOAP :
:
:
:
:
:
该办理筹划只操纵 HTTP、SOAP、BASIC 身份考证和 SSL,这使它关于异类环境很抱负.在下一部份中,
我们将看到若何操纵该办理筹划来成立 Perl 脚本,以便直接衔接到 SQL Server.
[1] [2] 下一页
利用 Perl 脚本举行管理和监督
通过 SQL Server 中的 Web 服务,可以从任何具有 Web 服务支持的平台衔接到 SQL Server.为了阐明这一互操作性,
我们将成立 Perl 脚本以衔接到 SQL Server.Perl 被广泛用于成立脚本,以便帮忙管理和监督数据库服务器.
下面的示例阐明了若何成立 Perl 脚本以监督数据库的状况.SQL Server 已经引入了对动态管理视图的支持,
这些视图供应了有关正在运行的服务器的动态状况信息.在该示例中,我们成立了一个 Perl 脚本,以便通过查询名为 dm_exec_connections 的动态视图来监督与数据库之间的活动衔接的数目.
我们假定运行这段代码的计算机已经精确安装和配置了 Perl.
这里的示例利用 ActiveState 5.8.x Perl 软件包.该脚本操纵下列软件包:
• |
安装 http://theoryx5.uwinnipeg.ca/ppms/Crypt-SSLeay.ppd |
• |
安装 http://theoryx5.uwinnipeg.ca/ppms/XML-Parser.ppd |
• |
安装 http://theoryx5.uwinnipeg.ca/ppms/libxml-perl.ppd |
• |
安装 http://theoryx5.uwinnipeg.ca/ppms/XML-RegExp.ppd |
• |
安装 http://theoryx5.uwinnipeg.ca/ppms/XML-DOM.ppd |
在该示例中,我们需求 SSL,因为 Perl 利用程序将利用 BASIC 身份考证和 SQL-Auth,并且 XML 软件包需求分
析呼应并显示后果.
注 有关完好脚本的信息,请拜见相关的下载.
下面的代码块将 SOAP Lite 软件包实例化.我们需求明确要求将输分外式化为 XML,以便可以解析呼应.
my $soap = SOAP::Lite -> :
uri('http://Adventure-Works/Customers/') -> :
proxy('https://srikr-800/sql/sql_auth') -> :
outputxml(1):
接下来,我们需求为该衔接设置凭证.因为我们打算利用 SQL-Auth,所以我们需求按以下方法初始化
UsernameToken 标头.
# sample Yukon security SOAPheader
#
#
#
#
foo-bar1
#
#
my $Username = SOAP::Data-> name('Username' => 'AdminUser'); my $Password = SOAP::Data-> name('Password' => 'password') -> attr({Type => :
'http://docs.oasis-open.org/wss/2004/01 /oasis-200401-wss-username-token-profile-1.0#PasswordText'}):
my $UsernameToken= SOAP::Data-> name('UsernameToken') -> value(\SOAP::Data-> value($Username, $Password)):
my $security = SOAP::Header-> name(Security) -> attr({'xmlns' => :
'http://docs.oasis-open.org/wss /2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'}) -> value(\$UsernameToken):
BASIC 身份考证凭证是通过实现以下存根传入的:
sub SOAP::Transport::HTTP::Client::get_basic_credentials { return 'User' => 'Password':
}
注 倡议不要在脚本文件中存储/引用密码.用户在处理密码时应当遵守尺度的安全原则.
接下来,我们调用 Web 办法.因为我们将履行 T-SQL 批处理语句,所以代码以下所示:
# # Invoking a sqlbatch to retrieve the number of connections $soap -> :
on_action (sub { return '""';}):
$method = SOAP::Data-> name('sqlbatch')-> attr({xmlns => :
'http://schemas.microsoft.com/sqlserver/2004/SOAP'}):
@param = ( SOAP::Data-> name(BatchCommands => :
'select session_id, net_transport, protocol_type from sys.dm_exec_connections')):
最后,我们解析 XML 呼应以检索数据:
for my $node($doc-> getElementsByTagName("row")) { print "\n":
for my $kid ($node-> getChildNodes) { print $kid-> getNodeName():
print ":: ":
for my $gkid ($kid-> getChildNodes) { print $gkid-> getNodeValue():
#print the actual values for the columns } print "\t":
} print "\n":
}
运行该 Perl 脚本可以生成以下输出:
Testing SOAP::Lite client against AdventureWorks Contacts sample web service.
Calling sqlbatch Server response...
Server response...
session_id:: 54 net_transport:: HTTP
protocol_type:: SOAP
connection_id::5EC2B4E2-39A6-4FA7-BBDB-144DAED59A41
session_id:: 53 net_transport:: Shared memory
protocol_type:: TSQL
connection_id:: 5AE50B7D-D919-4FBC-BA42-6069A12F4D30
session_id:: 53 net_transport:: Session protocol_type:: TSQL
connection_id::05830BE9-F12F-429D-BBAC-E4EEB2C528EF
parent_connection_id:: 5AE50B7D-D919-4FBC-BA42-6069A12F4D30
上述输出表明与 SQL Server 之间存在两个衔接:一个衔接利用二进制协议 TDS,并且显示为 protocol_type:: TSQL ;
另一个衔接对应于在运行该 Perl 脚本时生成的 SOAP/HTTP 衔接.
我但愿将您的注意力引到 session_id 列上面.该会话标识符和与该恳求关联的数据库引擎中的 spid(会话进程标识符)
匹配.有两个条目的 spid 等于 53,因为一个对应于物理衔接(net_transport 是同享内存),另一个对应于在同一物理
衔接上举行的逻辑会话.(有关多个活动后果集的具体信息,请参阅 Multiple Active Result Sets (MARS) in SQLServer 2 .)该逻辑会话的 parent_connection_id 与物理衔接匹配这一事实证明了这一点.关于 TDS 而言,衔接和会话精密联
系在一同;换句话说,用户无法从差别的物理衔接加入现有的会话.SOAP 拜候利用户可以通过在恳求中指定得当的会话标
头来加
入现有会话.在 SOAP 中利用多个会话这一主题需求专门撰文加以阐述.感爱好的读者可以阅读 SQL Server Books Online
来得到有关若何启用和利用会话的具体信息.
其他筹划
目前,让我们观察其他一些筹划.大大都数据库利用程序都在存储历程中内置了大量以数据为中央的逻辑.本机 XML Web
服务通过使得将存储历程公开为 Web 服务变得非常简单来操纵这一投资.别的,本机 Web 服务还可以提高性能,因为
数据拜候是在进程内发生的,而不是被发送到中间层进程.
查找服务
当 SQL Server 宿主数据以供引用/查找时,可以利用 Web 服务作为公开该数据的抱负机制.在该筹划中,数据库充当
大量数据的储存库.Web 服务操纵数据库引擎查询处理功效来获得后果.此类查询中的后果集定义杰出,并且大约为几
个 KB.此类筹划的示例包含:
• |
产品目录 |
• |
向用户返回特定于区域的信息(天色、交通)的具有位置意识的 Web 服务. |
• |
用于 Intranet 的雇员目录 |
报告生成服务
在很多筹划中,数据库服务器宿主作为报告底子的数据.在 Intranet 内部,将这些报告公开为 Web 服务是很便利
的.用户可以轻松地成立 T-SQL 存储历程,以便利用 SQL Server 中的 Web 服务生成和公开报告.您还可以轻松地
将 Web 服务的后果嵌入到 office 利用程序(如 Excel 和 InfoPath)中.这不但使客户端利用程序可以越发简单
地检索数据,并且还免除了数据库管理员的支持附加底子构造以便公开 Web 服务的负担.用户还可以利用本机 Web
服务的批处理拜候功效来运行特别查询和生成报告.
跨平台拜候用户定义的范例
SQL Server 引入了对用户定义范例的支持.借助于用户定义的范例 (UDT),您可以扩大数据库的标量范例系统(
不但仅是为系统范例定义您自己的别名 — 该功效在从前版本的 SQL Server 中已经可用).比方,您可以定义一个
名为 Point 的 UDT 范例,以捕捉点的 x 和 y 坐标.本机 Web 服务操纵了大众语言运行库中供应的序列化框架,并
且启用了诸如 XML 之类范例的传输.然后,客户端平台可以将该 XML 反序列化为在其平台上定义的对象.这就使 Java
客户端可以发送和接纳 UDT 实例.
移动筹划
目前,任何可以解析 XML 和提交 HTTP 恳求的设备都可以拜候 SQL Server.有了这一前提,再加上在丢弃衔接时
重新加入现有会话的本领,非常合适于为移动设备和不按时衔接的设备开辟利用程序,而这又使得随时、随地拜候
SQL Server 成为大概.
异步服务
可以将本机 Web 服务与 SQL Service Broker(也通过 SQL Server 供应)结合利用,以便构建供应异步服务的解
决筹划.请考虑一个订单处理工作流.您可以公开一个 SQL Server Web 服务,该服务接纳订单,并且通过当即确
认它已经收到了该订单举行呼应.然后,可以将该订单输入到服务代理程序行列中,以便举行处理.订单的实施可
能需求调用其他 Web 服务.在实施该订单时,我们可以利用客户端已经预订的任何告诉机制来告诉该客户端.
小结
本机 XML Web 服务操纵了您在数据库服务器方面的投资,并且使您的数据库可以作为服务供应程序参与工作.我
已经具体阐明了若何利用该功效供应对异类环境中 SQL Server 中宿主的数据的拜候,并且描写了其他合适本机
Web 服务的筹划.本机 XML Web 服务通过使范围更为遍及的客户端可以衔接到 SQL Server,提高了互操作性,
增长了服务的扩大.
上一页 [1] [2]
以上是“SQL Server 本机 Web 服务的利用筹划[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:本文地址: | 与您的QQ/BBS好友分享! |