【发布时间】:2013-11-04 01:49:30
【问题描述】:
尝试从我的数据库发送消息时出现权限错误。
我启用 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 上的授权更改为 [sa];
这可能是件坏事。但是,我可以更改授权以将其恢复到原来的状态吗?我以为它会是“dbo”,但这是不对的。是否应该设置为谁创建了数据库?
【问题讨论】:
-
对话是否跨数据库(一个数据库中的发起者,另一个数据库中的目标?如果是,如果
EXECUTE AS USER 'dbo'成功,您可以签入 other 数据库吗?我希望它失败,然后你需要ALTER AUTHORIZATION ON DATABASE::[MYDBNAME] TO [sa];。 -
我自己也遇到了同样的错误。在我的情况下,这两个服务都在同一个数据库中,但是在我的目标队列上激活的 sp 调用了一个错误,因为它包含对 [MYDBNAME] 的连接。运气好的话? Remus 的解决方案有效吗?