通过


安全概述 (Service Broker)

适用于SQL ServerAzure SQL 托管实例

Service Broker 有助于编写伸缩性强的、同时也是安全可靠的数据库应用程序。 Service Broker 安全性允许由不同 SQL Server 实例托管的服务安全通信,即使这些实例位于没有其他信任关系的不同计算机上,或者源和目标计算机同时未连接到同一网络。

Service Broker 安全机制依赖于“证书”。 一般方法是使用证书建立远程数据库的凭据,然后将远程数据库中的作映射到本地用户。 本地用户的权限适于代表远程服务执行任何操作。 证书在数据库间共享。 不共享用户的任何其他信息。

Service Broker 提供两种不同的安全性类型:对话安全性和传输安全性。 了解这两种类型的安全性及其协同工作方式有助于设计、部署和管理 Service Broker 应用程序。

  • 对话安全性:加密单个对话对话中的消息,并验证对话中参与者的身份。 对话安全模式还提供远程身份验证和消息完整性检查。 对话安全模式在两个服务间建立经过身份验证和加密的通信。

  • 传输安全性:防止未经授权的数据库将 Service Broker 消息发送到本地实例中的数据库。 传输安全模式在两个数据库间建立经过身份验证的网络连接。

对话协议和相邻中转站协议旨在围绕在数据库之间传递消息而不是在远程数据库上执行命令而设计。 这种通信方式使 Service Broker 可以在不要求数据库共享 SQL Server 登录名或 Windows 安全凭据的情况下提供服务。

有关证书的详细信息,请参阅 CREATE CERTIFICATE

Adventure Works Cycles 安全方案

注意

本文中的代码示例是使用示例数据库进行测试的 AdventureWorks2025 ,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。

在一个示例业务方案中,Adventure Works Cycles(一家虚构的公司)创建一个用于将零件订单传递给供应商的 Service Broker 服务。 此服务要求对 Adventure Works 和对供应商都是安全的。 每个供应商必须能够保证只有现有的客户可以提交订单。 Adventure Works 必须能够保证只有符合要求的供应商可以接收订单。 AdventureWorks2008R2 数据库和供应商之间的消息必须加密,以保证任何第三方都无法读取消息。 为了确保最高级别的安全性,只有合格的供应商才能连接到 AdventureWorks2008R2 数据库。

为满足消息必须加密的要求,Adventure Works 和供应商使用如下 Service Broker 对话安全模式:

  1. 为设置对话安全模式,AdventureWorks2008R2 管理员创建名为 VendorOutgoing 的本地用户,并为该用户创建密钥对。

  2. 管理员将包含密钥对中的公钥的证书分发给需要访问该服务的供应商。

  3. 每个供应商将来自 Adventure Works Cycles 的证书安装到数据库中,并创建拥有该证书的用户。

  4. 然后,供应商创建一个密钥对,并向 AdventureWorks2008R2 管理员发送有关供应商服务的服务名称的信息,以及具有该密钥对公钥的证书。

  5. AdventureWorks2008R2 管理员为每个供应商创建一个用户,并将来自该供应商的证书与此用户相关联。

  6. 管理员还为每个供应商创建一个远程服务绑定,在该绑定中将供应商服务的名称与为该供应商创建的用户相关联。

为满足只有符合要求的供应商才可以连接到 AdventureWorks2008R2 数据库的要求,AdventureWorks2008R2 管理员使用 Service Broker 传输安全模式:

  1. 为了设置传输安全性,AdventureWorks2008R2 管理员在 master SQL Server 实例的数据库中创建一个证书,用于发送消息。

  2. AdventureWorks2008R2 管理员将证书发送给每个供应商。

  3. 每个供应商管理员在 master 数据库中创建一个用户来拥有证书,然后在将接收消息的 SQL Server 实例中安装证书。

  4. 供应商管理员接下来在 master 实例的数据库中创建证书,并将该用户的公钥发送到 AdventureWorks2008R2 管理员。

  5. 最后,AdventureWorks2008R2 管理员在 master 数据库中创建一个用户,以拥有每个供应商公钥证书,并在数据库中安装每个供应商证书。

将传输安全模式和对话安全模式相结合,有助于 AdventureWorks2008R2 管理员满足此应用程序的安全要求。 在此方案中,供应商无法登录到 AdventureWorks2008R2 数据库,Adventure Works 管理员无法登录到供应商数据库。 只有 Service Broker 消息可在数据库间交换。