安全性概述 (Service Broker)
Service Broker 有助于编写伸缩性强的、同时也是安全可靠的数据库应用程序。Service Broker 安全机制使不同 SQL Server 实例承载的服务之间可以安全地通信,即使这些实例所在的不同计算机之间没有任何其他信任关系或者源计算机和目标计算机没有同时连接到同一网络。
Service Broker 安全机制依赖于“证书”。常规方法是使用证书建立远程数据库的凭据,然后将操作从远程数据库映射到本地用户。本地用户的权限适于代表远程服务执行任何操作。证书在数据库间共享。不共享用户的任何其他信息。
Service Broker 提供两种不同类型的安全模式,即“对话安全模式”和“传输安全模式”。了解这两种类型的安全模式以及它们如何协同工作,将有助于设计、部署和管理 Service Broker 应用程序。
对话安全模式 — 加密单个对话会话中的消息,并验证对话参与者的身份。对话安全模式还提供远程身份验证和消息完整性检查。对话安全模式在两个服务间建立经过身份验证和加密的通信。
传输安全模式 — 防止未经授权的数据库向本地实例中的数据库发送 Service Broker 消息。传输安全模式在两个数据库间建立经过身份验证的网络连接。
请注意,对话协议和相邻 Broker 协议是围绕着在数据库间传递消息,而不是在远程数据库上执行命令来设计的。这种通信方式使 Service Broker 可以在不要求数据库共享 SQL Server 登录名或 Windows 安全凭据的情况下提供服务。
有关证书的详细信息,请参阅 CREATE CERTIFICATE (Transact-SQL)。
Adventure Works Cycles 安全方案
在一个示例业务方案中,Adventure Works Cycles(一家虚构的公司)创建一个用于将零件订单传递给供应商的 Service Broker 服务。此服务要求对 Adventure Works 和对供应商都是安全的。每个供应商必须能够保证只有现有的客户可以提交订单。Adventure Works 必须能够保证只有符合要求的供应商可以接收订单。AdventureWorks 数据库和供应商之间的消息必须加密,以保证任何第三方都无法读取消息。为确保安全的级别尽可能高,只有符合要求的供应商可以连接到 AdventureWorks 数据库。
为满足消息必须加密的要求,Adventure Works 和供应商如下使用 Service Broker 对话安全模式:
为设置对话安全模式,AdventureWorks 管理员创建名为 VendorOutgoing 的本地用户,并为该用户创建密钥对。
管理员将包含密钥对中的公钥的证书分发给需要访问该服务的供应商。
每个供应商将来自 Adventure Works Cycles 的证书安装到数据库中,并创建拥有该证书的用户。
然后供应商创建密钥对,并将有关该供应商服务的服务名称的信息以及含有该密钥对中的公钥的证书发送给 AdventureWorks 管理员。
AdventureWorks 管理员为每个供应商创建一个用户,并将来自该供应商的证书与此用户相关联。
管理员还为每个供应商创建一个远程服务绑定,在该绑定中将供应商服务的名称与为该供应商创建的用户相关联。
为满足只有符合要求的供应商才可以连接到 AdventureWorks 数据库的要求,AdventureWorks 管理员如下使用 Service Broker 传输安全模式:
为设置传输安全模式,AdventureWorks 管理员在将要发送消息的 SQL Server 实例的 master 数据库中创建一个证书。
AdventureWorks 管理员将证书发送给每个供应商。
每个供应商管理员在 master 数据库中创建一个拥有该证书的用户,然后在将要接收消息的 SQL Server 实例中安装该证书。
接下来,供应商管理员在该实例的 master 数据库中创建一个证书,并将该用户的公钥发送给 AdventureWorks 管理员。
最后,AdventureWorks 管理员在 master 数据库中创建一个拥有每个供应商公钥证书的用户,并在数据库中安装每个供应商的证书。
将传输安全模式和对话安全模式相结合,有助于 AdventureWorks 管理员满足此应用程序的安全要求。请注意,在此方案中,供应商不能登录到 AdventureWorks 数据库,Adventure Works 管理员也不能登录到供应商数据库。只有 Service Broker 消息可在数据库间交换。