尝试从我的数据库发送邮件时收到权限错误。
我为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_queue中看到以下错误:
在目标队列中排队消息时发生异常。 错误:916,状态:3。服务器主体“sa”无法访问 当前安全上下文下的数据库“MYDBNAME”。
(其中MYDBNAME是我们正在使用的数据库的名称)
我认为错误是由这一行引起的:
更改DATABASE :: A-DB TO [sa];
的授权
这可能是一件坏事。但是,我可以更改授权以将其恢复到原来的状态吗?我认为这将是'dbo',但那不对。是否应该设置为谁创建了数据库?
答案 0 :(得分:6)
异常 - 错误:916,状态:3。服务器主体“\”无法访问当前安全上下文下的数据库。
错误:916,状态:3。服务器主体'sa'无法在当前安全上下文中访问数据库'xxx'。
分辨率 - 执行'ALTER DATABASE ... SET TRUSTWORTHY ON'命令。 technet link
因为附加到SQL Server实例的数据库 不能立即信任,不允许数据库访问 超出数据库范围的资源,直到数据库为止 明确标记值得信赖。
ALTER DATABASE MyDatabase SET TRUSTWORTHY ON
在我的情况下,启动器和目标服务都在同一个数据库中,但它是一个导致此错误的外部数据库的连接。应该为启用了Svc Broker的db编写Alter。
答案 1 :(得分:0)
因为数据库是服务器级对象,所以它需要由服务器级主体拥有。因此,您需要提供登录以拥有数据库。至于哪个登录,我通常选择sa,但它可以是您的登录或任何其他个人登录的登录。