SQL Service Broker - 服务器主体"sa"无法访问

Cra*_*aig 3 sql-server service-broker

尝试从我的数据库发送邮件时收到权限错误.

我推荐了proker服务:

-- Enable Broker on Initiator
ALTER DATABASE A-DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE A-DB SET ENABLE_BROKER;
ALTER AUTHORIZATION ON DATABASE::A-DB TO [sa];
ALTER DATABASE A-DB SET TRUSTWORTHY ON;
ALTER DATABASE A-DB SET MULTI_USER;
GO
Run Code Online (Sandbox Code Playgroud)

然后我创建队列和所有...

当我尝试发送消息时,我在sys.transmission_queue中看到以下错误:

在目标队列中排队消息时发生异常.错误:916,状态:3.服务器主体"sa"无法访问当前安全上下文下的数据库"MYDBNAME".

(其中MYDBNAME是我们正在使用的数据库的名称)

我认为错误是由这一行引起的:

更改数据库上的授权:: A-DB TO [sa];

那可能是件坏事.但是,我可以更改授权以将其恢复到原来的状态吗?我认为这将是'dbo',但那不对.是否应该设置为谁创建了数据库?

JM.*_*JM. 6

异常 - 错误:916,状态:3.服务器主体"\"无法访问当前安全上下文下的数据库"".

错误:916,状态:3.服务器主体'sa'无法在当前安全上下文下访问数据库'xxx'.

分辨率 - 执行'ALTER DATABASE ... SET TRUSTWORTHY ON'命令. technet链接

由于无法立即信任附加到SQL Server实例的数据库,因此在数据库明确标记为可信任之前,不允许数据库访问数据库范围之外的资源.

ALTER DATABASE MyDatabase SET TRUSTWORTHY ON
Run Code Online (Sandbox Code Playgroud)

就我而言,启动器和目标服务都在同一个数据库中,但它是一个导致此错误的外部数据库的连接.应该为启用了Svc Broker的db编写Alter.