标识和访问控制 (Service Broker)
大多数涉及多个实例的 Service Broker 应用程序都在专门为该应用程序创建的数据库主体的安全上下文中运行。这些数据库主体应具有完成应用程序执行的任务所需的最低权限。
下面的注意事项适用于为 Service Broker 应用程序创建的数据库主体:
在远程 Service Broker 应用程序连接到 SQL Server,并向该实例传递消息时,应用 Service Broker 远程授权。为远程授权指定的数据库主体必须具有作为起始服务宿主的数据库中的 CONNECT 权限,并且还必须具有针对起始服务本身的 SEND 权限。用户必须拥有用于身份验证的证书。用户无需拥有其他对象、其他权限或者能够通过任何其他机制登录。
对于要发起会话的数据库主体,该主体必须具有对起始服务的队列的 RECEIVE 权限。
拥有起始服务的数据库主体必须具有对目标服务的 SEND 权限。
对于要向某一服务发送消息的数据库主体,该主体必须具有对此服务的 SEND 权限。对于其宿主为不同实例的服务,Service Broker 对话安全模式确定远程实例中的数据库主体。有关详细信息,请参阅Service Broker 对话安全设置。请注意,Service Broker 在检查 SEND 权限时不考虑 Windows 角色的成员身份。
被指定作为激活存储过程的用户的用户必须具有执行此过程的权限。通常,所指定的用户具有执行过程中的语句所需的权限。但是,请注意,如果存储过程本身是用 EXECUTE AS 子句定义的,则存储过程中的语句用此存储过程定义的安全上下文运行。SQL Server 首先将安全上下文设置为该队列的指定用户。然后,SQL Server 执行存储过程,存储过程将安全上下文更改为此过程的指定用户。
当 Service Broker 传输安全模式使用 SSPI 时,远程数据库的服务帐户必须具有 master 中的 CONNECT 权限,并且还必须对应于登录名。因此,远程 SQL Server 实例运行所用的帐户必须具有使用 Windows 身份验证登录到 SQL Server 的权限。该登录名无需具有其他权限,也无需拥有任何数据库中的对象。