应为将消息发送到远程服务器上的 Service Broker 的事件通知配置 Service Broker 对话框安全性。 必须根据 Service Broker 对话框完全安全模型手动配置对话安全性。 完全安全模型支持对发送到远程服务器和从远程服务器发送的消息进行加密和解密。 尽管事件通知以一个方向发送,但其他消息(如错误)也会以相反的方向返回。
为事件通知配置对话框安全性
以下步骤介绍了实现事件通知对话安全性所需的过程。 这些步骤包括需要在源服务器和目标服务器上执行的操作。 源服务器是在其中创建事件通知的服务器。 目标服务器是接收事件通知消息的服务器。 在继续下一步之前,您必须在源服务器和目标服务器上完成每个步骤中的操作。
重要
所有证书都必须使用有效的开始日期和到期日期创建。
步骤 1:建立 TCP 端口号和目标服务名称。
建立源服务器和目标服务器将接收消息的 TCP 端口。 还必须确定目标服务的名称。
步骤 2:为数据库级身份验证配置加密和证书共享。
在源服务器和目标服务器上执行以下操作。
| 源服务器 | 目标服务器 |
|---|---|
| 选择或创建用于保存事件通知和主密钥的数据库。 | 选择或创建用于保存主密钥的数据库。 |
| 如果源数据库不存在主 密钥,请创建主密钥。 源数据库和目标数据库都需要主密钥,以帮助保护各自的证书。 | 如果目标数据库不存在主密钥,请创建主密钥。 |
| 为源数据库创建登录名和相应的用户。 | 为目标数据库创建登录名和相应的用户。 |
| 创建 源数据库用户拥有的证书。 | 创建目标数据库用户拥有的证书。 |
| 将证书备份 到可由目标服务器访问的文件。 | 将证书备份到源服务器可以访问的文件。 |
| 创建用户,定义目标数据库的用户,并使用 WITHOUT LOGIN。 此用户将拥有要从备份文件创建的目标数据库证书。 用户不必映射到登录名,因为此用户的唯一用途是拥有在后续步骤 3 中创建的目标数据库证书。 | 创建一个用户,指定源数据库的用户,并设为无登录权限。 此用户将拥有要从备份文件创建的源数据库证书。 用户不必映射到登录名,因为此用户的唯一用途是拥有在后续步骤 3 中创建的源数据库证书。 |
步骤 3:共享证书并授予数据库级身份验证的权限。
在源服务器和目标服务器上完成以下操作。
| 源服务器 | 目标服务器 |
|---|---|
| 从目标证书的备份文件创建证书,并将目标数据库用户指定为所有者。 | 从源证书的备份文件创建证书,并将源数据库用户指定为所有者。 |
| 向 源数据库用户授予创建事件通知的权限。 有关此权限的详细信息,请参阅 CREATE EVENT NOTIFICATION (Transact-SQL)。 | 向目标数据库用户授予对现有事件通知 Service Broker 协定的 REFERENCES 权限: https://schemas.microsoft.com/SQL/Notifications/PostEventNotification。 |
| 创建到目标服务的远程服务绑定,并指定目标数据库用户的凭据。 远程服务绑定保证源数据库用户拥有的证书中的公钥将对发送到目标服务器的消息进行身份验证。 | 授予 对目标数据库用户的 CREATE QUEUE、CREATE SERVICE 和 CREATE SCHEMA 权限。 |
| 如果尚未作为目标数据库用户连接到数据库,请立即连接数据库。 | |
| 创建队列 以接收事件通知消息, 并创建用于 传递消息的服务。 | |
| 向源数据库用户授予目标服务的 SEND 权限。 | |
| 向目标服务器提供源数据库的 Service Broker 标识符。 可以通过查询 sys.databases 目录视图的service_broker_guid列来获取此标识符。 对于服务器级事件通知,请使用 msdb 的服务代理标识符。 | 向源服务器提供目标数据库的 Service Broker 标识符。 |
步骤 4:创建路由并设置服务器级身份验证。
在源服务器和目标服务器上完成以下动作。
| 源服务器 | 目标服务器 |
|---|---|
| 创建 到目标服务的路由,并指定目标数据库的 Service Broker 标识符和商定的 TCP 端口号。 | 创建到源服务的路由,并指定源数据库的 Service Broker 标识符和约定的 TCP 端口号。 若要指定源服务,请使用以下提供的服务: https://schemas.microsoft.com/SQL/Notifications/EventNotificationService |
| 切换到 master 数据库以配置服务器级身份验证。 | 切换到 master 数据库以配置服务器级身份验证。 |
| 如果 master 数据库不存在主密钥,请创建主密钥。 | 如果 master 数据库不存在 主 密钥,请创建主密钥。 |
| 创建对 数据库进行身份验证的证书。 | 创建对数据库进行身份验证的证书。 |
| 将证书备份 到可由目标服务器访问的文件。 | 将证书备份到源服务器可以访问的文件。 |
| 创建一个终结点,并指定同意的 TCP 端口号、FOR SERVICE_BROKER(AUTHENTICATION = CERTIFICATE certificate_name),以及身份验证证书的名称。 | 创建一个终结点,并指定同意的 TCP 端口号、FOR SERVICE_BROKER(AUTHENTICATION = CERTIFICATE certificate_name),以及身份验证证书的名称。 |
| 创建登录名,并指定目标服务器的登录名。 | 创建登录名,并指定源服务器的登录名。 |
| 向验证器目标登录名授予终结点的 CONNECT 权限。 | 向源验证器登录名授予终结点的 CONNECT 权限。 |
| 创建用户,并指定目标验证器登录名。 | 创建用户并指定源验证器登录名。 |
步骤 5:共享用于服务器级身份验证的证书并创建事件通知。
在源服务器和目标服务器上完成以下操作。
| 源服务器 | 目标服务器 |
|---|---|
| 从目标证书的备份文件创建证书,并将目标验证器用户指定为所有者。 | 从源证书的备份文件创建证书,并将源验证器用户指定为所有者。 |
| 切换到创建事件通知的源数据库,如果尚未作为源数据库用户进行连接,请立即执行此作。 | 切换到目标数据库以接收事件通知消息。 |
| 创建事件通知,并指定目标数据库的中转站服务和标识符。 |
另请参阅
GRANT (Transact-SQL)
备份证书 (Transact-SQL)
sys.databases (Transact-SQL)
加密层次结构
实现事件通知
CREATE MASTER KEY (Transact-SQL)
CREATE LOGIN (Transact-SQL)
CREATE USER (Transact-SQL)
创建证书(Transact-SQL)
创建远程服务绑定 (Transact-SQL)
GRANT (Transact-SQL)
CREATE ROUTE (Transact-SQL)
创建队列(Transact-SQL)
CREATE SERVICE (Transact-SQL)
CREATE ENDPOINT (Transact-SQL)
CREATE EVENT NOTIFICATION (Transact-SQL)