Sql server SQL Service Broker-服务器主体“;sa";无法访问

Sql server SQL Service Broker-服务器主体“;sa";无法访问,sql-server,service-broker,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;

尝试从数据库发送邮件时,我遇到权限错误

我喜欢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
然后我创建队列和所有这些

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

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

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

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

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


那可能是件坏事。但是,我可以更改授权,使其恢复到以前的状态吗?我以为是“dbo”,但那是不对的。是否应将其设置为谁创建过数据库?

因为数据库是服务器级对象,它需要由服务器级主体拥有。因此,您需要提供一个登录名来拥有数据库。至于哪个登录名,我通常选择sa,但它可以是您的登录名,也可以是任何其他个人的登录名。

例外-错误:916,状态:3。服务器主体“\”无法在当前安全上下文下访问数据库“”

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

解决方案-执行“更改数据库…”。。。设置“可信”命令。

因为连接到SQL Server实例的数据库 无法立即信任,不允许访问数据库 超出数据库范围的资源,直到数据库 明确标明值得信赖


在我的例子中,启动器和目标服务都在同一个数据库中,但导致此错误的是外部数据库的连接。应该为启用Svc代理的数据库编写Alter。

会话是否跨数据库(一个数据库中的启动器,另一个数据库中的目标?如果是,如果
以用户“dbo”的身份执行成功,您能否签入另一个数据库?
我预计它会失败,然后您需要
将数据库上的授权::[MYDBNAME]更改为[sa];
。我自己也会遇到同样的错误。在我的例子中,两个服务都在同一个数据库中,但我的目标队列上激活的sp调用了一个sp,该sp会出错,因为它包含到[MYDBNAME]的联接。运气好吗?Remus的解决方案有效吗?因为我使用了SSDT。我设置了“数据库设置”-“杂项”-“服务器代理选项:”EnableBroker
ALTER DATABASE MyDatabase SET TRUSTWORTHY ON