sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbnam

Posted 阳光白云--davidhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbnam相关的知识,希望对你有一定的参考价值。

用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" 无法在当前安全上下文下访问数据库 "dbname"。

想着是架构方面的问题,换sa还是不行。查到微软的一篇文章 提示需要开数据库的 ALTER DATABASE current_db SET TRUSTWORTHY ON 

我把跨的那个库设置了还是不行。最后自己写测试代码,代码如下:

create database test1

create database test2

use test2
create table t_1 (id int ,ddate date )
insert into t_1 (id,ddate) values(1,GETDATE())

use test1 

create proc p_test
WITH EXECUTE AS OWNER
as
begin
 select GETDATE()
 select * from test2..t_1
end

exec  p_test




ALTER DATABASE test1 SET TRUSTWORTHY on
ALTER DATABASE test2 SET TRUSTWORTHY ON

两个库都 SET TRUSTWORTHY on  却可以了。。。。。。折腾了一天时间。。。。。。。。。。

EXECUTE AS OWNER 设置会话的执行上下文。队列里去不掉,要解决有两个方法 ,上面是方法其一,其二是用证书。。。。。。。

以上是关于sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbnam的主要内容,如果未能解决你的问题,请参考以下文章

sql server Service Broker 相关查询

SQL Server Service Broker 的缺点 [关闭]

错误:未启用当前数据库的SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。

未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。]

未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker

The SQL Server Service Broker for the current database is not enabled