我想知道如何设置适当的安全性,以便从一个数据库向另一个数据库发送消息。我遇到的问题是,发送数据库服务通过授权与特定用户绑定,因为该服务也会向远程服务绑定发送消息。
所以这是我的服务。
CREATE SERVICE [WebRequestService]
AUTHORIZATION WebDbSSBUser
ON QUEUE [dbo].[WebRequestQueue]
([RequestContract],[CountRequestContract],[OrderRequestContract]);
GO
我想从该服务发送消息到另一个服务 在不同的本地数据库中也是如此 那个服务是
CREATE SERVICE [AppRequestService]
AUTHORIZATION DBO
ON QUEUE [dbo].AppRequestQueue
([RequestContract]);
AppRequestService不需要发送消息到任何远程绑定, 所以它是由DBO授权的。当我尝试发送。
declare @handle uniqueidentifier
begin dialog conversation @handle from service [WebRequestService] to service 'AppRequestService' on contract [RequestContract];
send on conversation @handle message type [AppRequest] (@item_data)
我在传输日志中得到这样的信息:
当在目标队列中排队发送消息时发生了一个异常。 错误:916,状态。3. 服务器委托人 "S-1-9-3-1771139253-1243890769-2689325230-2851569174 "在当前安全上下文下无法访问数据库 "appmembership"。
sid是WebDbSSBUser。
不知道应该如何设置权限,我希望不用单独设置一个队列。
use appmembership
go
create user WebDbSSBUser --for login WebDbSSBUser
go
grant send on service::AppRequestService to WebDbSSBUser
go